我有一个启动子活动的父活动。
在儿童活动中,我做:
toolbar = (Toolbar) findViewById(R.id.app_bar);
setSupportActionBar(toolbar);
getSupportActionBar().setTitle("Ride");
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
当我单击主页/向上按钮时,我finish
活动。
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
finish();
return true;
default:
return super.onOptionsItemSelected(item);
}
}
此外,我在子活动中的另一个位置执行 我的问题: 我的问题是,我只想在 当我不是通过"向上"按钮完成时-"父活动"中的数据发生更改,因此-当我按下"备份"按钮时,不需要刷新"父";但当我执行其他 我该如何检测?finish
,在我有finish
的两个位置,它都返回到父活动finishes
的一个的情况下刷新父活动。finish
时,我想刷新"父"。
作为启动子活动
startActivityForResult(intent, requestCode)
在向上按钮的情况下,设置结果为儿童活动成功,在反向按压的情况下设置结果为失败。
并且在父活动的onActivityResult(..)
中获得状态并在期望的情况下杀死父活动。
在父活动中
startActivityForResult(Intent intent, int REQUEST_CODE);
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data)
case RESULT_OK:
//refresh parentAcitivty
//get the result from the Up button back
//e.g adapter.notifydatasetchanged()
case RESULT_CANCEL:
//Do nothing
//return from childActivity by other finishes
儿童活动
case 1: //**from the Up button**
setResult(RESULT_CANCEL);
finish();
case 2: //**do the other finish**
setResult(RESULT_OK);
finish();
我希望代码能给你一个提示。
在这种情况下,使用onResume
。
@Override
protected void onResume() {
super.onResume();
// your code (for example: initialize(); etc.. )
}
如果你参考这篇文章,你就会明白为什么。
活动生命周期Android
如上所述,您在两个地方有finish()方法。一个是ActionBar上的后退按钮(称为AbBack),另一个位于其他位置(RandomBack 设A为主"活动",设B为子"活动"。 在A而不是startActivity()方法中,使用 这样做是为了让活动B在完成时可以将数据返回到此活动,并且根据数据可以刷新/不刷新 因此,在活动B中, 在AbBack的情况下,调用此方法setResult(RESULT_OK);对于RandomBack,调用setResult(RESULT_CANCELD); 最后,在活动A中,您必须覆盖方法 其中可以比较resultCode==RESULT_OK,如果是,则表示数据来自AbBack,如果不是,则表示来自RandomBackstartActivityForResult(Intent intent, int REQUEST_CODE);
onActivityResult(int requestCode, int resultCode, In
帐篷数据)
尝试使用navigateUpFromTask()
使用NavUtils.navigationUpFromSameTask(this);onBackPressed函数如下:
@Override
public void onBackPressed() {
super.onBackPressed();
NavUtils.navigateUpFromSameTask(this);
}