今天是元宵节,祝大家元宵节快乐。
今天也是家父生日,希望家父身体健康,生日快乐。儿,不孝,不能陪家父在合家团圆的时刻过生日。
好了,进入正题,今天的主题是关于Activity之间的数据传递。
Activity之间的数据传递的思路很简单,就是启动活动时传递数据。
先来看一下逻辑图。
1.data
2.将data用一系列的putExtra()方法重载
3.把putExtra()方法放到Intent当中去
4.使用Intent进行页面转换
5.使用getIntent()方法获取用于启动Activity的Intent
6.调用getStringExtra()方法,传入相应的键值,取得数据
接下来看一下代码
MainActivity.java
package wlhwh.example.com.myapplication;
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
public class MainActivity extends AppCompatActivity {
private Button mButton;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mButton = (Button)findViewById(R.id.button);
mButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//被传递的数据在OnClick()方法里面
String data = "我是被传递的数据";
//页面跳转
Intent intent = new Intent(MainActivity.this,SecondActivity.class);
//putExtra()方法重载,并放到intent当中
//putExtra()方法有两个参数,前一个是键,后一个是数据
intent.putExtra("data",data);
startActivity(intent);
}
});
}
}
SecondActivity.java
package wlhwh.example.com.myapplication;
import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
/**
* Created by WLHWH on 2017/2/11.
*/
public class SecondActivity extends AppCompatActivity{
@Override
protected void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.second_activity);
//getIntent()方法
Intent intent = getIntent();
//getStringExtra()方法获取intent中的数据
//getStringExtra(0方法直接获取putExtra()方法中的键值
String data = intent.getStringExtra("data");
//打印出结果
Log.d("SecondActivity",data);
}
}
结果图
那么到这里基本的简单的数据传递就差不多了
进阶篇
在了解了原理之后,我们就来在实际的应用中来应用一下Activity之间的数据传递。
FirstActivity.java
package wlhwh.example.com.datatransport_20170209;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
public class FirstActivity extends Activity {
private EditText mEditText_1;
private EditText mEditText_2;
private EditText mEditText_3;
private Button mButton_1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.first_activity);
mButton_1 = (Button)findViewById(R.id.button_1);
mButton_1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//这里在OnClick()方法里面找到EditText实例的,我是第一次用到
mEditText_1 = (EditText)findViewById(R.id.edittext_int);
mEditText_2 = (EditText)findViewById(R.id.edittext_double);
mEditText_3 = (EditText)findViewById(R.id.edittext_string);
//取得输入的int型数据
int et_int = Integer.parseInt(mEditText_1.getText().toString());
//取得输入的double型数据
double et_double = Double.parseDouble(mEditText_2.getText().toString());
//取得输入的String型数据(即字符串类型,什么数据符号都可以)
String et_String = mEditText_3.getText().toString();
Intent intent = new Intent();
intent.setClass(FirstActivity.this,SecondActivity.class);
//这里new一个bundle对象,并将要传递的数据传入
Bundle bundle = new Bundle();
//这里bundle获得输入对象的数据
bundle.putInt("et_int",et_int);
bundle.putDouble("et_double",et_double);
bundle.putString("et_String",et_String);
//把bundle的对象给intent
intent.putExtras(bundle);
startActivityForResult(intent,1);
}
});
}
}
SecondActivity.java
package wlhwh.example.com.datatransport_20170209;
import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.widget.Button;
import android.widget.TextView;
/**
* Created by WLHWH on 2017/2/9.
*/
public class SecondActivity extends AppCompatActivity{
private TextView mTextView_1;
private TextView mTextView_2;
private TextView mTextView_3;
private Button mButton_2;
Bundle bundle;
Intent intent;
@Override
protected void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.second_activity);
//取得intent中的bundle对象
intent = this.getIntent();
//取得bundle中的数据
bundle = intent.getExtras();
//分别获取不同的数据
int et_int = bundle.getInt("et_int");
double et_double = bundle.getDouble("et_double");
String et_String = bundle.getString("et_String");
mTextView_1 = (TextView)findViewById(R.id.textview_int);
mTextView_2 = (TextView)findViewById(R.id.textview_double);
mTextView_3 = (TextView)findViewById(R.id.textview_String);
//显示不同的数据
mTextView_1.setText("我是取得的int型数据:"+et_int);
mTextView_2.setText("我是取得的double型数据:"+et_double);
mTextView_3.setText("我是取得的String型数据:"+et_String);
}
}
结果图
那么这里我们基本就把Activity之间的数据传递搞定了。