Oro*_*chi 15 android android-fragments
我有一个带导航抽屉的应用程序,它正在切换片段.从其中一个片段中,我正在召唤一个新的活动.当我点击这个活动(在工具栏中)时,我想回到之前选择的片段,但它会让我回到第一个片段.我将我的片段添加到后台堆栈,所以这应该不是问题.
这是我已经尝试过的:
我在第二个活动中覆盖了onBackPressed方法,如下所示:
@Override
public void onBackPressed() {
if (getFragmentManager().getBackStackEntryCount() == 0) {
this.finish();
} else {
getFragmentManager().popBackStack();
}
}
Run Code Online (Sandbox Code Playgroud)
它不起作用.我还在onsaveinstancestate方法中保存了当前片段的索引并检索它但结果相同.我也尝试过总是将当前片段放在变量中并尝试重新显示它但仍然不起作用.还有什么我可以尝试的吗?
有趣的事实:如果我按下底部面板,它实际上会回到之前的片段.
编辑:这是我执行此操作的代码:
private void replaceFragment(Fragment fragment)
{
if (fragment != null)
{
FragmentManager manager = getSupportFragmentManager();
manager.beginTransaction()
.replace(R.id.main_content, fragment)
.addToBackStack(null)
.commit();
}
}
Run Code Online (Sandbox Code Playgroud)
如果savedInstanceState为null,我只添加第一个片段,如下所示:
if (savedInstanceState == null) {
// first time
mTitle = getResources().getString(R.string.home);
replaceFragment(HomeFragment.newInstance());
}
Run Code Online (Sandbox Code Playgroud)
是的,所有这些都是在onCreate()方法中完成的.
我遇到了同样的问题并得到了解决。您唯一需要做的就是覆盖活动中的方法“onOptionsItemSelected”:
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if (item.getItemId() == android.R.id.home) {
finish();
return true;
}
return super.onOptionsItemSelected(item);
}
Run Code Online (Sandbox Code Playgroud)
android.R.id.home 是菜单中的第一个片段。
| 归档时间: |
|
| 查看次数: |
17752 次 |
| 最近记录: |