1

2つのタブを持つPagerFragmentAdapterがありますが、フラグメントは1つだけですPartOne():

@Override
    public Fragment getItem(int arg0) {
        Bundle data = new Bundle();
        switch(arg0){
            case 0:
                PartOne oneFragment = new PartOne();                
                data.putInt("current_page", arg0+1);
                oneFragment.setArguments(data);
                return oneFragment;
            case 1:
                PartOne twoFragment = new PartOne();
                data.putInt("current_page", arg0+1);
                twoFragment.setArguments(data);
                return twoFragment; 
        }
        return null;
    }

PartOne()が読み込まれると、取得します

partChosen = getArguments().getInt("current_page");

私が使用する

if (partChosen == 1) { // Code }

説明したように使用すると、フラグメントの2つのインスタンスは同じように動作し、同じ結果をもたらします(そうでない場合でも、partChosen == 2のように)。ただし、ケース1でフラグメントPartOne()をPartTwo()*に置き換えると、必要に応じて動作します。

* PartTwo()のコードはPartOne()とまったく同じですが、名前が異なります。

どうか、私は何を間違っているのですか?

4

2 に答える 2

0

繰り返しを除けば、コードは問題ありません。

getItem()を作成するためのより良い方法は、次のとおりです。

@Override
public Fragment getItem(int position) {
    Bundle data = new Bundle();
    PartOne oneFragment = new PartOne();                
    data.putInt("current_page", position + 1);
    oneFragment.setArguments(data);
    return oneFragment;

}

私が考えることができる唯一の問題は、あなたがpartChosen静的であると宣言したことです。

于 2013-03-15T15:34:36.570 に答える
0

私は同じ問題を抱えていて、次のように解決しました:

@Override
    public Fragment getItem(int arg0) {

        switch(arg0){
            case 0:
                Bundle data = new Bundle();
                PartOne oneFragment = new PartOne();                
                data.putInt("current_page", arg0+1);
                oneFragment.setArguments(data);
                return oneFragment;
            case 1:
                Bundle data = new Bundle();
                PartOne twoFragment = new PartOne();
                data.putInt("current_page", arg0+1);
                twoFragment.setArguments(data);
                return twoFragment; 
        }
        return null;
    }

フラグメントのonCreateViewメソッドで引数を取得します。

@Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_monday, container, false);
        TextView textView = (TextView) view.findViewById(R.id.textview1);
        textView.setText(getArguments().getInt("current_page"););

        return view;
    }
于 2017-05-10T23:48:38.133 に答える