Kha*_*aza 16 android android-fragments fragmenttransaction
我正在研究碎片,并且在区分FragmentTransaction.replace(id, fragment, tag)和FragmentTransaction.addToBackStack(tag)调用时很少感到困惑.让我们说我当前的片段是FragmentA,然后我加载了FragmentB.我希望将来,当我需要加载FragmentA时,我不必重新加载它.只需在旧状态下加载旧的.我使用了以下代码段:
public void loadFragment(Fragment fragmentB, String tag) {
FragmentManager fm = getSupportFragmentManager();
View fragmentContainer = findViewById(R.id.fragment_container);
FragmentTransaction ft = fm.beginTransaction();
ft.replace(fragmentContainer.getId(), fragmentB, tag);
ft.addToBackStack(tag);
ft.commit();
}
Run Code Online (Sandbox Code Playgroud)
现在我很困惑,我应该在哪里添加字符串标签?在replace()或addToBackStack()或在两个电话?你能解释这两个标签位置之间的区别吗?
你能解释这两个标签位置之间的区别吗?
文档addToBackStack很清楚:
此后备堆栈状态的可选名称,或null.
适用于replace:
片段的可选标记名称,以便稍后使用FragmentManager.findFragmentByTag(String)检索片段.
所以这两个参数是独立的,一个标识后向堆栈,另一个标识内部的碎片Activity's FragmentManager.
从这个角度来看,你的代码似乎是正确的,只是我不会fragmentContainer通过它的id 搜索视图,只是使用它的id替换片段.使它更简单:
public void loadFragment(Fragment fragmentB, String tag) {
FragmentManager fm = getSupportFragmentManager();
FragmentTransaction ft = fm.beginTransaction();
ft.replace(R.id.fragment_container, fragmentB, tag);
ft.addToBackStack(null);
ft.commit();
}
Run Code Online (Sandbox Code Playgroud)
如果您稍后不需要识别此后备堆栈,请为其传递null addToBackStack.至少我总是这样做.
在此示例中,您无需将标记添加为标识.做就是了:
ft.replace(R.id.fragment_container,fragmentB);
ft.addToBackStack(null);
ft.commit();
Run Code Online (Sandbox Code Playgroud)
当您想要添加没有UI的片段时,通常会使用标记作为标识.
| 归档时间: |
|
| 查看次数: |
41041 次 |
| 最近记录: |