android fragment addToBackStack(null):如何将同一个片段添加到堆栈中一次?

Posted

技术标签:

【中文标题】android fragment addToBackStack(null):如何将同一个片段添加到堆栈中一次?【英文标题】:android fragment addToBackStack(null) :how to add the same fragment to stack just one time? 【发布时间】:2013-01-09 04:44:06 【问题描述】:

fragment使用addToBackStack(null)方法,在一个activity中多次点击一个方法,fragment页面每次都会保存到back stack,当我按back键时,会恢复同一个页面,如何添加同一个fragment只堆叠一次?

    mSettingBtn.setOnClickListener(new OnClickListener() 

        @Override
        public void onClick(View v) 
            SettingFragment settingFragment = new SettingFragment();

            FragmentTransaction transaction = getFragmentManager().beginTransaction();
            transaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
            transaction.replace(R.id.left_framelayout, settingFragment);
            transaction.addToBackStack(null);
            transaction.commit();
        
    );

【问题讨论】:

【参考方案1】:

Fragment 添加到后台时,您还应该传递TAG 以便能够识别Fragment

 .addToBackStack(SettingsFragment.TAG);

在添加Fragment 之前,您将能够使用以下方法检查此Fragment 是否已经在后台堆栈中:

 getFragmentMangager().findFragmentByTag(SettingsFragment.TAG);

如果Fragment 尚未添加,这将返回null

【讨论】:

传递给addToBackStack() 的参数可用于检索整个BackStackEntry 对象,而不仅仅是单个片段。为了设置片段标签,请考虑使用 add(int, Fragment, String)replace(int, Fragment, String) 的 3 参数版本 那么在点击返回按钮后如何按标签检索片段?这将在哪里以及如何进行?类似于:ListFragment 1(单击 listView 行,使用标签提交事务)>>> ListFragment 2 >>>(单击)BACK BUTTON >>> 通过标签检索/恢复 ListFragment 1 而无需重新加载数据 @whyoz Fragment 将为您恢复,您不必手动重新添加它或其他任何东西,这将由 android 完成,如果您正确使用 Fragments 和回栈 如果 Fragment 重用同一个类怎么办?假设片段 1 被命名为“LF”,并且您想要单击一行并加载另一个“LF”(片段 2)。片段 1 将一个字符串传递给片段 2,它加载不同的数据,但它使用相同的类 (LF)。逻辑会说使用 addToBackStack(string) 之类的字符串,然后我回击 getFragmentMangager().findFragmentByTag(string) 返回 null?如果有什么不同,我会使用替换而不是添加。

以上是关于android fragment addToBackStack(null):如何将同一个片段添加到堆栈中一次?的主要内容,如果未能解决你的问题,请参考以下文章

关于Android中fragment的管理

android fragment 刷新功能

android fragment和activity的区别

android中Fragment的切换方法。

Android自学日记Android Fragment 真正的完全解析(上)

androidx.fragment.app.Fragment 无法转换为 android.app.Fragment