向上按钮调用父活动的OnDestroy

时间:2016-05-14 03:45:07

标签: android android-fragments android-lifecycle

从顶部开始,我想澄清一些事情:我正在努力的按钮不是back按钮。我指的是应用顶部ActionBar /工具栏中的up/home按钮,而不是底部的Android按钮。有一些类似性质的posts,但是它们是后退按钮,而不是向上按钮。

情况如下:我有一个活动A,它有一个ListView片段。当用户单击列表视图项时,它会启动活动B.非常典型。活动A在工具栏中有一个EditText字段,允许用户输入搜索参数。如果用户点击了活动B中的up/home按钮,我会成功返回活动A.但是,我希望活动A在他们离开时{C}场中显示相同的文字。如果用户点击EditText按钮,则会恢复此文本。但如果他们使用back按钮导航,则up/home字段为空。

使用一些日志语句,我可以看到,当从活动A中点击列表项时,EditTextonSaveInstanceState都被调用(但此时未调用onStop。 )在活动B中,当点按onDestroy按钮时,来自活动A的up/home 立即被调用,然后是onDestroy等。但是,捆绑{ {1}}为空,大概是因为onCreate刚被调用。

为什么在返回活动A时调用savedInstanceState?这对我来说毫无意义。以下是我在清单中的内容:

onDestroy

以下是活动A中的相关方法:

onDestroy

我不认为活动B中的任何代码都与此相关。

当用户点击活动A中的列表视图项时,这是我的控制台输出:

  

保存实例状态
停止

然后这是当用户点击活动B的<activity android:name=".Activity.ActivityA" android:label="@string/app_name" android:parentActivityName=".Activity.ParentActivity" android:theme="@style/AppTheme" android:launchMode="singleTop" android:windowSoftInputMode="stateVisible" /> <activity android:name=".Activity.ActivityB" android:label="@string/app_name" android:parentActivityName=".Activity.ActivityA" android:theme="@style/AppTheme" /> 按钮时生成的内容:

  

on destroy
on创建
在简历

如果还有其他任何可能有帮助的地方,请告诉我。谢谢你的建议!

2 个答案:

答案 0 :(得分:4)

我不知道为什么默认按钮实现会创建一个新活动,但我的工作解决方案是覆盖onOptionsItemSelected

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    int id = item.getItemId();
    if(id== android.R.id.home ){
        onBackPressed();
        return true;
    }
    return super.onOptionsItemSelected(item);
}

此解决方案也适用于我:

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
            case android.R.id.home:
                Intent intent = NavUtils.getParentActivityIntent(this);
                intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP
                        | Intent.FLAG_ACTIVITY_SINGLE_TOP);
                NavUtils.navigateUpTo(this, intent);
                return true;
            default:
                break;
        }
        return super.onOptionsItemSelected(item);
    }

答案 1 :(得分:0)

我也遇到了这个问题,经过进一步的挖掘后发现正确的解决方案是对清单进行更改,以将以下内容添加到您的父活动中:

android:launchMode="singleTop"

详细说明here