一、activity间互传:Intent+Bundle
1、不需要回传:
第一个activity中:
Intent intent = new Intent(MainActivity.this, MainActivityI.class);
Bundle bundle = new Bundle();
bundle.putSerializable("homeMessageModel", homeMessageModel);
...
intent.putExtras(bundle);
startActivity(intent);
第二个activity中:
Intent intent = this.getIntent();
Bundle bundle = intent.getExtras();
HomeMessageModel homeMessageModel = (HomeMessageModel) bundle.getSerializable("homeMessageModel");
...
2、需要回传值:
第一个activity中:
//发送给第二个activity数据
Intent intent = new Intent();
intent.setClass(getActivity(), MessageActivity.class);
Bundle bundle = new Bundle();
bundle.putSerializable("homeMessageModel", homeMessageModel);
intent.putExtras(bundle);
startActivityForResult(intent, 100);
//接受第二个activity数据
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == 100 && resultCode == 200) {
Bundle bundle = data.getExtras();
boolean hasPersonalMsg = bundle.getBoolean("hasPersonalMsg");
Log.e("FeaturedFragment","hasPersonalMsg==="+hasPersonalMsg);
if (!hasPersonalMsg) {
mMsgDot.setVisibility(View.GONE);
} else {
mMsgDot.setVisibility(View.VISIBLE);
}
}
}
第二个activity中:
//接收第一个activity的数据
intent = this.getIntent();
if (intent != null) {
bundle = intent.getExtras();
if (bundle != null) {
homeMessageModel = (HomeMessageModel) bundle.getSerializable("homeMessageModel");
}
}
//返回给第一个activity的数据,
bundle.putBoolean("hasPersonalMsg", true);
intent.putExtras(bundle);
this.setResult(200, intent);
二、fragment间互传
三、activity传值给fragment:Bundle
activity中:
OfficeFragment mFragOffice=new OfficeFragment();
Bundle bundleOffice = new Bundle();
bundleOffice.putSerializable("officeMsg", officeMsg);
mFragOffice.setArguments(bundleOffice);
fragment中
Bundle bundle = getArguments();
if (bundle != null) {
ArrayList<HomeMsgOfficeModel> officeMsg = (ArrayList<HomeMsgOfficeModel>) bundle.getSerializable("officeMsg");
}
如果在onresume中用这种方法会报错:
java.lang.IllegalStateException: Fragment already active
解决办法:
在activity中
private ArrayList<HomeMsgOfficeModel> officeMsg = new ArrayList<>();
private ArrayList<HomeMsgPersonalModel> personalMsg = new ArrayList<>();
public ArrayList<HomeMsgOfficeModel> getOfficeMsg() {
return officeMsg;
}
public void setOfficeMsg(ArrayList<HomeMsgOfficeModel> officeMsg) {
this.officeMsg = officeMsg;
}
public ArrayList<HomeMsgPersonalModel> getPersonalMsg() {
return personalMsg;
}
public void setPersonalMsg(ArrayList<HomeMsgPersonalModel> personalMsg) {
this.personalMsg = personalMsg;
}
//网络获取数据后
personalMsg.addAll(message);
officeMsg.addAll(gonggao);
然后在fragment中
personalMsg=((MessageActivity)getActivity()).getPersonalMsg();//获取activity的值
officeMsg=((MessageActivity)getActivity()).getOfficeMsg();//获取activity的值
参考:android activity中的变量怎么传值给fragment