0
我有以下代码:如何避免片段重复问题?
private List<WeakReference<Fragment>> mFragList = new ArrayList<WeakReference<Fragment>>();
@Override
public void onAttachFragment (Fragment fragment) {
mFragList.add(new WeakReference(fragment));
}
public List<Fragment> getActiveFragments() {
ArrayList<Fragment> ret = new ArrayList<Fragment>();
for(WeakReference<Fragment> ref : mFragList) {
Fragment f = ref.get();
if(f != null) {
if(f.isVisible()) {
ret.add(f);
}
}
}
return ret;
}
public Fragment findFragement(String tClass) {
List<Fragment> fragments = getActiveFragments();
for (Fragment fragment : fragments) {
if (tClass.equalsIgnoreCase("Home")) {
if (fragment instanceof ToggleFragment) {
return fragment;
}
} else if (tClass.equalsIgnoreCase("Contacts")) {
if (fragment instanceof ContactFragment) {
return fragment;
}
}
}
return null;
}
的代码工作正常,但我有一个担心,是不是这样的代码:
@Override
public void onAttachFragment (Fragment fragment) {
mFragList.add(new WeakReference(fragment));
}
导致重复当屏幕被重建或ft.replace () 用来?
有没有更好的解决方法呢?无需替换太多的代码或不使用getsupportfragmentmanager.getfragments()?
谢谢!
有没有其他方法可以确保重复不会发生?你能否解释我的代码,如果可能的话,会更容易理解。 hashmap –
最简单的方法我可以不用fragmentManager就可以想到的最简单的方法就是创建一个独特的属性(可能是一个字符串),它对于每个片段实例都是常量,对于每种类型的片段都是不同的(我喜欢调用我的“TAG”)。然后,你可以遍历你的ArrayList,并检查你的任何片段是否有你想要放入的片段的TAG,如果有,请替换它们。 – evanklicker
是否有一个特别的原因,你不能使用fragmentManager?这正是他们设计要处理的。 – evanklicker