Fel*_*lus 3 android android-fragments
在下面的一段代码中,使用detach
/attach
片段而不只是replacing
它们有什么意义?
private void showFragment(String tag) {
String oldTag = mSelectedTag;
mSelectedTag = tag;
final FragmentManager fm = getSupportFragmentManager();
final FragmentTransaction ft = fm.beginTransaction();
final Fragment oldFragment = fm.findFragmentByTag(oldTag);
final Fragment fragment = fm.findFragmentByTag(tag);
if (oldFragment != null && !tag.equals(oldTag)) {
ft.detach(oldFragment);
}
if (fragment == null) {
ft.replace(R.id.container, getContentFragment(tag), tag);
} else {
if (fragment.isDetached()) {
ft.attach(fragment);
}
}
ft.commit();
}
Run Code Online (Sandbox Code Playgroud)
为什么我不能写这样的东西?
private void showFragment(String tag) {
final FragmentManager fm = getSupportFragmentManager();
final FragmentTransaction ft = fm.beginTransaction();
ft.replace(R.id.container, getContentFragment(tag), tag);
ft.addToBackStack(null);
ft.commit();
}
Run Code Online (Sandbox Code Playgroud)
getContentFragment
方法,以防万一:
private Fragment getContentFragment(String tag) {
Fragment fragment = null;
if (Frag1.TAG.equals(tag)) {
fragment = new Frag1();
} else if (Frag2.TAG.equals(tag)) {
fragment = new Frag2();
}
return fragment;
}
Run Code Online (Sandbox Code Playgroud)
这是FragmentTransaction.detach()
(强调添加)的文档:
从 UI 中分离给定的片段。这与将其放在返回堆栈上时的状态相同:片段已从 UI 中移除,但其状态仍由片段管理器主动管理。当进入这个状态时,它的视图层次结构被破坏。
所以一个分离的片段在FragmentManager
; 中仍然“活着” 。它的视图已被破坏,但它的所有逻辑状态都保留了下来。因此,当您调用 时attach()
,您会得到相同的片段。
FragmentTransaction.replace()
,new
然而,传递一个片段会导致你使用同一个片段类的两个不同实例,而不是重用单个实例。
就我个人而言,我从来不需要使用detach()
and attach()
,并且一直使用replace()
. 但这并不意味着没有地方和时间它们会派上用场。
归档时间: |
|
查看次数: |
4219 次 |
最近记录: |