更换 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

Fragment初探

如何在android中获取Fragment的包名(不是Activity的)[重复]

Android - 在通知上单击打开文件并按回不显示应用程序

关闭Android弹出窗口并按回键