更换 Fragment 并按回
Posted
技术标签:
【中文标题】更换 Fragment 并按回【英文标题】:Replace Fragment and press back 【发布时间】:2017-10-15 08:16:57 【问题描述】:嗨,按照我的代码显示列表片段中的详细片段
getActivity().getSupportFragmentManager().beginTransaction().replace(R.id.FragmentContainer1, DealFragment.newInstance(dealItems, position, currentPage, totalCount)).addToBackStack(null).commit();
现在当我按下返回按钮时,我得到新的 ListFragment.ListFragmnt 状态未保存。
我提到了一些堆栈问题,但没有得到正确答案
我尝试了下面的代码,但是当应用程序进入后台并被系统杀死时会导致问题(就像我从详细视图中打开 chrome 并且当我从 chrome 返回时我的应用程序已关闭并最小化)FragmentTransaction ft = getActivity().getSupportFragmentManager().beginTransaction();
ft.hide(getActivity().getSupportFragmentManager().findFragmentById(containerId));
ft.add(containerId, detailFragment);
ft.addToBackStack(null);
ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
ft.commit();
当我移动到 ListFragment 以详细热维护详细片段的状态时,对此问题的任何解决方案。
我已经从堆栈溢出here is the link引用了这个链接
当我们从列表转到详细信息并返回到列表片段时,我想要与 Gmail 应用程序相同的功能。滚动位置并保持一切在我的情况下没有发生
【问题讨论】:
是否希望在DetailFragment中按下后退按钮后不获取ListFragment? no Fragment state is not saved for listgfragment 根据我的回答尝试覆盖 onBackPressed。 【参考方案1】:试试这个:
@Override
public void onBackPressed()
if (getSupportFragmentManager().getBackStackEntryCount() > 0)
getSupportFragmentManager().popBackStack();
else
this.finish();
【讨论】:
这没有帮助 @apk 实际上隐藏第一个片段是个好主意。那么使用第二种方法有什么问题呢?【参考方案2】:在您的活动中设置第一个片段:
ListFragment listFragment = new ListFragment();
FragmentTransaction transaction = getFragmentManager().beginTransaction();
transaction.add(R.id.FragmentContainer1, listFragment );
transaction.addToBackStack(null);
transaction.commit();
然后在listfragment中调用详情片段:
DetailFragment detailFragment = new DetailFragment();
FragmentTransaction transaction = getFragmentManager().beginTransaction();
transaction.replace(R.id.FragmentContainer1, detailFragment);
transaction.addToBackStack(null);
transaction.commit();
【讨论】:
是的,如果您不覆盖 onBackPressed,这将保留您在前一个片段中的最后一个已知状态。或者,如果你愿意,什么都不会改变。以上是关于更换 Fragment 并按回的主要内容,如果未能解决你的问题,请参考以下文章
如果 setIconifiedByDefault 为 false,则从另一个意图返回时键盘弹出
Android Reorder Fragment Backstack
如何在android中获取Fragment的包名(不是Activity的)[重复]