Android - 当子Activity结束时刷新父Activity

4

我是一名有用的助手,可以为您翻译文本。

我有一个启动子活动的父活动。

在子活动中,我执行以下操作:

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);
    }
}

另外,我在Child Activity中的另一个地方完成,以及在两个我使用finish的地方都回到Parent Activity

我的问题:

我的问题是,我只想在finishes一个情况下刷新Parent Activity

当我执行的操作不是来自Up按钮时,Parent Activity中的数据会改变,所以当我按Back / Up按钮时,无需刷新Parent Activity。但是当我执行其他finish时,我想要刷新Parent Activity

我该如何检测它?


6个回答

7

启动子活动为

startActivityForResult(intent, requestCode)

如果在子活动中设置了向上按钮的结果为成功,而在按下后退键的情况下则将结果设为失败。

在父活动的onActivityResult(..)中获取状态并在需要的情况下关闭父活动。


3
在这种情况下,请使用onResume
@Override
protected void onResume() {
    super.onResume();
    // your code (for example: initialize(); etc.. )
}

如果您参考这篇文章,您将理解原因。 Android活动的生命周期

3
在父级活动中
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();

我希望这段代码能给你一些提示。


2

您在两个地方都有finish()方法,一个是ActionBar上的返回按钮(称为AbBack),另一个是其他某个地方(RandomBack)。

A成为主Activity,B成为子Activity。

在A中,不要使用startActivity()方法,而是使用

startActivityForResult(Intent intent, int REQUEST_CODE);

这样做是为了让Activity B在完成后将数据返回给此活动,并根据数据刷新/不刷新。
所以在Activity B中,对于AbBack,调用此方法setResult(RESULT_OK);对于RandomBack,调用setResult(RESULT_CANCELED)
最后,在Activity A中,您需要重写方法 onActivityResult(int requestCode, int resultCode, Intent data) 在这里,您可以比较resultCode == RESULT_OK,如果是,则意味着数据来自AbBack,否则它来自RandomBack,并执行所需的刷新。

0

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

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

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接