我有一个启动子活动的父Activity。
在儿童活动中,我这样做:
toolbar = (Toolbar) findViewById(R.id.app_bar);
setSupportActionBar(toolbar);
getSupportActionBar().setTitle("Ride");
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
当我点击Home / Up按钮时,我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
的两个地方,它都会回到< strong>家长活动。
我的问题:
我的问题是,我只想在finishes
的一个的情况下刷新父活动。
当我完成而不是从向上按钮时 - 父活动中的数据会发生变化,所以 - 当我按下后退/向上按钮时,没有需要刷新父级,但当我执行其他finish
时,我想刷新父级。
我该如何检测?
答案 0 :(得分:7)
以
开始子活动startActivityForResult(intent, requestCode)
如果在向上按钮设置结果为子活动成功,并且在背压设置结果为失败。
在onActivityResult(..)
父项活动中获取状态并在所需的情况下终止父活动。
答案 1 :(得分:2)
如上所述,你有两个地方的finish()方法。一个是ActionBar上的后退按钮(让它称为 AbBack ),另一个是其他地方( RandomBack )。
让 A 成为主要活动 B 成为子活动。
在A而不是startActivity()方法中,使用
startActivityForResult(Intent intent, int REQUEST_CODE);
这样做,活动B完成后可以将数据返回到此活动,并根据您可以刷新/不刷新的数据
所以在活动B ,
如果是 AbBack ,请调用此方法 setResult(RESULT_OK);对于 RandomBack ,请调用 setResult(RESULT_CANCELED);
最后在活动 A 中,您必须覆盖方法
onActivityResult(int requestCode, int resultCode, In
帐篷数据)
您可以在哪里比较resultCode == RESULT_OK,如果是,则表示数据来自 AbBack ,如果不是 RandomBack ,则执行所需操作刷新。
答案 2 :(得分:2)
在家长活动中
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
在ChildActivity中
case 1: //**from the Up button**
setResult(RESULT_CANCEL);
finish();
case 2: //**do the other finish**
setResult(RESULT_OK);
finish();
我希望代码会给你一个提示。
答案 3 :(得分:2)
在这种情况下,请使用onResume
。
@Override
protected void onResume() {
super.onResume();
// your code (for example: initialize(); etc.. )
}
如果你参考这篇文章,你会理解为什么。
答案 4 :(得分:0)
答案 5 :(得分:0)
使用NavUtils.navigateUpFromSameTask(this);像这样的onBackPressed函数:
@Override
public void onBackPressed() {
super.onBackPressed();
NavUtils.navigateUpFromSameTask(this);
}