Android中Activity之间或者Activity与Server之间进行界面切换数据交互,使用最多的便是Intent。
(1) Intent 传递String等基本数据 并返回
(2) Intent 传递 List
(3) Intent 传递对象
(4) Intent 传递List<对象>
(5) Application 共享全局数据
(1) Intent 传递String等基本数据 并返回
MainActivity的Button
Intent mIntent = new Intent(MainActivity.this,StringActivity.class);
mIntent.putExtra("data1", "this is from MainActivity");
startActivityForResult(mIntent, 1);
MainActivity 接收Activity返回的数据
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
// TODO Auto-generated method stub
super.onActivityResult(requestCode, resultCode, data);
if(resultCode==2){
String mString = data.getStringExtra("data2");
mTextView.setText(mString);
}
}
requestCode ==1 这个MainActivity可能通过Intent启动了几个Activity。requestCode表示是哪个Activity返回的数据。利用这两个参数,就可以确定到底是谁在发,谁在收。接收Activity代码:
Intent mIntent = getIntent();
String mString = mIntent.getStringExtra("data1");
mTextView.setText(mString);
然后数据返回 关闭Activity
Intent mIntent = new Intent();
mIntent.putExtra("data2", "this is from StringActivity");
setResult(2, mIntent);
finish();
(2) Intent 传递 ListMainActivity发送数据
List<String> mList = new ArrayList<String>();
mList.add("hello");
Intent mIntent = new Intent(MainActivity.this,SecondActivity.class);
mIntent.putExtra("data", "datalist");
mIntent.putStringArrayListExtra("list", (ArrayList<String>) mList);
startActivityForResult(mIntent, 1);
接收的时候,可以通过key 判断数据是否接收成功。以区别不同的发起端。因为这里不能接收Intent的发送Code
Intent mIntent = getIntent();
String mString = mIntent.getStringExtra("data");
String mString2 = mIntent.getStringExtra("xxx");
ArrayList<String> mArrayList = mIntent.getStringArrayListExtra("list");
Log.i("SecondActivity", mString);
if(!TextUtils.isEmpty(mString2)){
Log.i("SecondActivity", mString2);
}else{
Log.i("SecondActivity", "Null");
}
Log.i("SecondActivity", mArrayList.toString());
(3) Intent 传递对象发送。Person实例必须要实现 序列化的接口。
Person mPerson = new Person("小明", 16);
Bundle mBundle = new Bundle();
mBundle.putSerializable("data", mPerson);
Intent mIntent = new Intent(MainActivity.this,ObjectActivity.class);
mIntent.putExtras(mBundle);
startActivityForResult(mIntent, 1);
接收
Intent mIntent = getIntent();
Person mPerson = (Person)mIntent.getSerializableExtra("data");
if(mPerson != null){
Log.i("ObjectActivity", mPerson.toString());
}
(4) Intent 传递List<对象>发送
List<Person> mList = new ArrayList<Person>();
Person mPerson = new Person("小明", 16);
Person mPerson1 = new Person("小兰", 17);
mList.add(mPerson);
mList.add(mPerson1);
Intent mIntent = new Intent(MainActivity.this,ObjectActivity.class);
mIntent.putExtra("listobj",(Serializable)mList);
startActivityForResult(mIntent, 1);
接收:
List<Person> mList = (List<Person>) mIntent.getSerializableExtra("listobj");
for (int i = 0; i < mList.size(); i++) {
Log.i("ObjectActivity", mList.get(i).toString());
}
(5) Application 共享全局数据子类的定义一定不要重写构造方法。不然不能实例化成功。
public class MyAppClass extends Application {
private String textString;
public String getTextString() {
return textString;
}
public void setTextString(String textString) {
this.textString = textString;
}
@Override
public String toString() {
return "MyAppClass [textString=" + textString + "]";
}
}
Manifest中添加注册信息:
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme"
android:name=".MyAppClass">
多了最后一行。发送
MyAppClass myAppClass = (MyAppClass)getApplication();
myAppClass.setTextString("123");
接收
MyAppClass myAppClass = (MyAppClass)getApplication();
String msg = myAppClass.getTextString();