恢复

时间:2017-09-01 16:43:59

标签: android android-fragments fragment back

我的工具栏上我的片段的后退/上移按钮可以在用户点击它时弹出片段,但是当我模拟Android在后台杀死进程然后恢复它时,该按钮不再触发onOptionsItemSelected方法。我仍然可以通过按下硬件后退按钮向后退,但这不是好事。

这部分是用于在片段的onActivityCreated方法中设置工具栏的非常标准的代码:

    toolbar = (Toolbar) activity.findViewById(R.id.toolbar_overview);
    activity.setSupportActionBar(toolbar);
    activity.getSupportActionBar().setDisplayHomeAsUpEnabled(true);

这也是为了处理按钮点击:

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    int id = item.getItemId();
    if (id == android.R.id.home) {
        // [coded that issues log statements, pops the fragment not shown]
    }
}

我通过以下方式重现问题:
1)打开应用程序
2)导航到这个片段
3)按下硬件主页按钮
4)在Android Studio中按红色X按钮(终止应用程序) 5)使用模拟器屏幕上的应用程序图标在模拟器中再次打开应用程序。 (我不会再从Android Studio运行应用程序) 6)按工具栏后退按钮。 (没有结果,没有日志声明;没有)。

非常感谢任何帮助。

感谢。

2 个答案:

答案 0 :(得分:0)

首先,请确保在onCreate Menthod中执行此操作:

toolbar = (Toolbar) activity.findViewById(R.id.toolbar_overview);
activity.setSupportActionBar(toolbar);
activity.getSupportActionBar().setDisplayHomeAsUpEnabled(true);

尝试再次启动应用时使用onResume刷新操作栏。使用此代码:

@Override
protected void onResume() {
    super.onResume();
    activity.setSupportActionBar(toolbar);
    activity.getSupportActionBar().setDisplayHomeAsUpEnabled(true);
}

希望这有帮助!

答案 1 :(得分:0)

在片段的 onCreate(Bundle savedInstanceState)方法中 添加这个

@Override
public boolean onOptionsItemSelected(MenuItem item){
   switch(item.getId()){
     case android.R.id.home:
      if(myFragObj != null){
             myFragObj.onOptionsItemSelected(item);
             return true
       }
     break;
   }
    return super.onOptionsItemSelected(item);
}

在您的活动覆盖onOptionsItemSelected(MenuItem项目)返回false

然后你应该在Fragment中接听电话

另一种方法会在您的活动中拥有一个片段对象。

当调用Activity的onOptionsItemSelected(MenuItem项)时,检查您的片段对象是否为null,然后使用您的fragmentObject帮助调用片段的onOptionsItemSelected(MenuItem项)。如果您的片段对象不为null,请确保返回true

e.g。

cd