1

アクションバータブを使用して、さまざまなカテゴリの下にいくつかの画像を表示しています。たとえば、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を使用したくないのは、それを行うと、それらのフラグメントを再作成する必要があり、コストがかかるためです。

4

0 に答える 0