2

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

在儿童活动中,我会:

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

此外,我finishChild Activity的另一个地方做了,在我拥有的两个地方finish,它都回到了Parent Activity

我的问题:

我的问题只想在.finishes

当我不是从 Up 按钮完成时- Parent Activity 中的数据会发生变化,所以 - 当我按下 Back/Up 按钮时,不需要刷新Parent,但是当我做另一个时finish,我想刷新父母。_

我怎样才能检测到呢?

4

6 回答 6

7

开始儿童活动

startActivityForResult(intent, requestCode)

并且在向上按钮设置结果为子活动成功的情况下,并且在回压设置结果为失败的情况下。

并在onActivityResult(..)父活动中获取状态并在所需情况下终止父活动。

于 2015-12-11T13:53:18.637 回答
2

在这种情况下,使用onResume.

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

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

活动生命周期 Android

于 2018-02-01T05:09:42.420 回答
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, In帐篷数据)

您可以在其中比较 resultCode == RESULT_OK ,如果是,则意味着数据来自AbBack或者如果不是来自RandomBack,并执行所需的刷新。

于 2015-12-11T14:08:43.287 回答
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();

我希望代码能给你一个提示。

于 2015-12-11T14:30:49.893 回答
0

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

@Override
public void onBackPressed() {
    super.onBackPressed();
    NavUtils.navigateUpFromSameTask(this);
}
于 2018-04-23T12:14:00.217 回答
0

尝试使用navigateUpFromTask()

于 2015-12-11T13:56:00.383 回答