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を使わないと考えることができる最も簡単な方法は、フラグメントのすべてのインスタンスに対して一定であり、あらゆるタイプのフラグメントに対して異なる独自の属性(おそらくString)を作ることです(私は私の "TAG")。次に、ArrayListを繰り返し処理して、そこに配置しようとしているフラグメントのTAGを持つフラグメントがあるかどうかを確認し、そうであれば置換します。 – evanklicker
fragmentManagerを使用できない特別な理由はありますか?これはまさに彼らが扱うように設計されたものです。 – evanklicker