0

私は次の単純なものを使用していますFragmentStatePagerAdapter。断片の 1 つへの参照を取得したいのですが、断片が破棄されている可能性があることに注意してください。

public class MyStatePagerAdapter extends FragmentStatePagerAdapter {

    private int count;

    public MyStatePagerAdapter(FragmentManager fm, int count) {
        super(fm);
        this.count= count;
    }

    @Override
    public Fragment getItem(int arg0) {

        switch (arg0) {
            case 0:
                return MyFragment1.newInstance();

            case 1:
                return MyFragment2.newInstance();

            default:
                return null;
        }
    }

    @Override
    public int getCount() {
        return count;
    }
}

この質問を見ました。2 番目の回答では、呼び出しFragmentStatePagerAdapter.instatiateItemたときにフラグメントへの参照が既に存在する場合、getItem()再び呼び出されることはありません。ここでソースコードを見て、私の理解では、これが実際に起こっていることです。

しかし、私は疑問に思っていました、私は次のようなことができますか?それは簡単に思えますが、どこでも使用されているのを見たことがないという事実は、私が見ることができない何かが本当に間違っているのではないかと疑っています.

基本的に私の質問は、次のようなものを使用してフラグメントにアクセスする際のエラーは何ですか?

public class MyStatePagerAdapter extends FragmentStatePagerAdapter {

    private int count;
    private MyFragment1 myFragment1;
    private MyFragment2 myFragment2;

    public MyStatePagerAdapter(FragmentManager fm, int count) {
        super(fm);
        this.count= count;
    }

    @Override
    public Fragment getItem(int arg0) {

        switch (arg0) {
            case 0:
                if (myFragment1 == null) {
                    myFragment1 = MyFragment1.newInstance();
                }
                return myFragment1;
            case 1:
               if (myFragment2 == null) {
                   myFragment2 = MyFragment2.newInstance();
               }
               return myFragment2;
            default:
                return null;
        }
    }

    @Override
    public int getCount() {
        return count;
    }

}

そして、それを取得するには、 に電話しますgetItem(position)

4

1 に答える 1

1

そのアプローチで私が目にする問題の 1 つはmyFragment1、存在しmyFragment2ないことnullです。null小切手を取り除くとしましょう。Fragmentを呼び出すたびに新しいを生成するという問題がありますgetItem()

私が目にするもう 1 つの問題は、getItem()常に が返されることnullです。breakにはステートメントがありませswitchん。対応するステートメントを追加すると、s の後に対応するステートメントを追加するまで、コードはコンパイルされません。defaultnullbreaksreturnif(){...}

また、メソッドのパラメーターに意味のある名前を追加する習慣を身につけることをお勧めします。

于 2014-05-16T15:51:57.683 に答える