在Android开发中,如果网络获取、数据解析、处理、控件适配、对话框等等都堆到Activity中的话,在后期做维护或者需要更改功能的时候,处理起来会很麻烦;所以经常做的就是将各个功能模块化,举个例子,在一个界面里面,需要有个对话框,可以将对话框提取出来,用一个Activity代替Dialog;那么这样会遇到一个问题,那就是,当你跳转Activity返回到之前的Activity,要怎么接受传回来的数据?
答案就是用onActivityResult,点击事件中,跳转Activity用的是startActivityForResult,
private int INTENT_SHOP = 2;
@OnClick(R.id.button3)
public void onClick() {
startActivityForResult(new Intent(this, SeleteShop.class), INTENT_SHOP);
}
然后在Activity的onActivityResult中接收返回值:
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
switch (requestCode) {
case 2:
if (resultCode == Activity.RESULT_OK) {
ToastUtil.showToast(this, data.getStringExtra("SHOP"));
}
break;
default:
break;
}
}
在新的Activity中,在点击关闭Activity传值的操作中写上:
Intent intent = new Intent();
intent.putExtra("SHOP", "today");
setResult(Activity.RESULT_OK, intent);
finish();
还有一种经常遇到的情况,那就是我们首页是底部点击切换fragment的Activity
这种情况,在切换Fragment的时候,需要在Add Fragment的时候,设置一个TAG;
private String[] mTag = {"Home", "Report", "Operate", "User"};
@Override
public void onCheckedChanged(RadioGroup radioGroup, int checkedId) {
for (int i = 0; i < rgs.getChildCount(); i++) {
if (rgs.getChildAt(i).getId() == checkedId) {
Fragment fragment = fragments.get(i);
FragmentTransaction ft = obtainFragmentTransaction(i);
getCurrentFragment().onPause(); // 暂停当前tab
if (fragment.isAdded()) {
fragment.onResume(); // 启动目标tab的onResume()
} else {
ft.add(fragmentContentId, fragment,mTag[i]);
}
showTab(i); // 显示目标tab
ft.commit();
// 如果设置了切换tab额外功能功能接口
if (null != onRgsExtraCheckedChangedListener) {
onRgsExtraCheckedChangedListener.OnRgsExtraCheckedChanged(radioGroup, checkedId, i);
}
}
}
}
在Activity的onActivityResult中写,之后的操作跟前面的操作一样。
private String mTAG = "Home";
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
FragmentManager fragmentManager = getSupportFragmentManager();
Fragment fragment = fragmentManager.findFragmentByTag(mTAG);
fragment.onActivityResult(requestCode,resultCode,data);
}
FragmentTabAdapter tabAdapter = new FragmentTabAdapter(this, fragments, R.id.tab_content, tabsRg);
//切换fragment的时候的动作
tabAdapter.setOnRgsExtraCheckedChangedListener(new FragmentTabAdapter.OnRgsExtraCheckedChangedListener() {
@Override
public void OnRgsExtraCheckedChanged(RadioGroup radioGroup, int checkedId, int index) {
switch (index) {
case 0:
mTAG = "Home";
break;
case 1:
mTAG = "Report";
break;
case 2:
mTAG = "Operate";
break;
case 3:
mTAG = "User";
break;
default:
break;
}
}
});