アクションバータブを使用して、さまざまなカテゴリの下にいくつかの画像を表示しています。たとえば、3つのタブがあります:-cat1、cat2、cat3.3つすべてがグリッドビューに画像を表示します.Tab Listenerクラスは以下のようになります:-
@Override
public void onTabSelected(Tab tab, FragmentTransaction ft) {
switch(id){
case 1:{
this.tagName="cat1";
Cat1 genf=(Cat1)= getFragmentManager().findFragmentByTag(this.tagName);
if(genf==null){
genf=Cat1.newInstance();
ft.add(R.id.therightframe,genf,tagName);
}else{
ft.attach(genf);
}
this.fragment=genf;
break;
}
case 2:{
this.tagName="cat2";
Cat2 genf= (Cat2) getFragmentManager().findFragmentByTag(this.tagName);
if(genf==null){
genf=Cat2.newInstance();
ft.add(R.id.therightframe,genf,tagName);
}else{
ft.attach(genf);
}
this.fragment=genf;
break;
}
case 3:{
this.tagName="Cat3";
Cat3 genf= (Cat3) getFragmentManager().findFragmentByTag(this.tagName);
if(genf==null){
genf=Cat3.newInstance();
ft.add(R.id.therightframe,genf,tagName);
}else{
ft.attach(genf);
}
this.fragment=genf;
break;
}
}
@Override
public void onTabUnselected(Tab tab, FragmentTransaction ft) {
ft.detach(fragment);
}
人がグリッドビューの画像をクリックすると、fragmenttransaction.replace を実行し、同じスペースに新しいフラグメントをロードします。はい、新しいアクティビティを開始しません。これがうまくいくまで。しかし、この後に Cat2 タブを選択すると、最後のステップ (グリッド内の画像がクリックされたとき) で作成されたフラグメントは置き換えられません。また、タブ リスナー クラスでは UI を空にする場所がないため、それは自然に思えます。追加して削除するだけです。これはどのように解決できますか。タブリスナーでreplaceを使用したくないのは、それを行うと、それらのフラグメントを再作成する必要があり、コストがかかるためです。