android - 当子活动完成时刷新父活动

时间:2015-12-11 13:49:55

标签: android android-activity parent-child up-navigation

我有一个启动子活动的父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时,我想刷新父级

我该如何检测?

6 个答案:

答案 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.. )
}

如果你参考这篇文章,你会理解为什么。

enter image description here

答案 4 :(得分:0)

尝试使用navigateUpFromTask()

答案 5 :(得分:0)

使用NavUtils.navigateUpFromSameTask(this);像这样的onBackPressed函数:

@Override
public void onBackPressed() {
    super.onBackPressed();
    NavUtils.navigateUpFromSameTask(this);
}