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):如何将同一个片段添加到堆栈中一次?的主要内容,如果未能解决你的问题,请参考以下文章