android - 当 child Activity 完成时刷新 parent Activity

android - refresh parent Activity when child Activity finishes

我有一个 parent Activity 开始一个 child activity.

在childactivity中,我做:

toolbar = (Toolbar) findViewById(R.id.app_bar);
setSupportActionBar(toolbar);
getSupportActionBar().setTitle("Ride");
getSupportActionBar().setDisplayHomeAsUpEnabled(true);

当我单击 Home/Up 按钮时,我 finish activity。

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
    case android.R.id.home:
        finish();
        return true;
    default:
        return super.onOptionsItemSelected(item);
    }
}

此外,我 finishChild Activity 的另外一个地方做finish,它回到 Parent Activity.

我的问题:

我的问题是我想刷新 Parent Activity 只有 onefinishes

当我完成时 不是通过向上按钮 - Parent Activity 中的数据发生变化, 所以 - 当我按下 Back/Up 按钮时,不需要刷新 Parent,但是当我按下另一个 finish 时,我要刷新Parent.

我怎样才能检测到?

开始 child activity 作为

startActivityForResult(intent, requestCode)

如果按下向上按钮,则在 child 中将结果设置为成功 activity,如果按下按钮,则将结果设置为失败。

并在 parent 的 onActivityResult(..) activity 中获取状态并在所需情况下杀死 parent activity。

尝试使用navigateUpFromTask()

如所述,您在两个地方使用了 finish() 方法。一个是 ActionBar 上的后退按钮(让它被称为 AbBack),另一个在其他地方(RandomBack)。

A为主Activity为B为子Activity.

在A中代替startActivity()方法,使用

startActivityForResult(Intent intent, int REQUEST_CODE);

这样做是为了 Activity B 在完成时可以 return 数据到这个 activity,并且根据数据你可以 refresh/not-refresh

所以在ActivityB,

AbBack的情况下,调用这个方法setResult(RESULT_OK);对于 RandomBack,调用 setResult(RESULT_CANCELED);

最后在ActivityA,你要重写方法

onActivityResult(int requestCode, int resultCode, In帐篷数据)

你可以在哪里比较 resultCode == RESULT_OK 如果是这样,那意味着数据来自 AbBack 或者如果不是来自 RandomBack,并进行所需的刷新。

在ParentActivity

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

希望代码能给大家一点提示

在这种情况下,使用 onResume

@Override
protected void onResume() {
    super.onResume();
    // your code (for example: initialize(); etc.. )
}

如果你参考这篇文章,你就会明白为什么。

activity life cycle Android

使用NavUtils.navigateUpFromSameTask(this); onBackPressed 函数如下:

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