【问题标题】:android fragment addToBackStack(null) :how to add the same fragment to stack just one time?android fragment addToBackStack(null):如何将同一个片段添加到堆栈中一次?
【发布时间】: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();
        }
    });

【问题讨论】:

    标签: android fragment


    【解决方案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?如果有什么不同,我会使用替换而不是添加。
    猜你喜欢
    • 2016-02-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多