Android中不同选项卡中的相同片段

时间:2013-03-15 15:10:43

标签: android fragmentpageradapter

我有一个带有两个标签但只有一个片段PartOne()的PagerFragmentAdapter:

@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 }

如上所述使用,片段的两个实例以相同的方式运行,给出相同的结果(就像partChosen == 2,即使它不是)。但是,当我在案例1中用PartTwo()*替换Fragment PartOne()时,它们就像我需要它一样。

* PartTwo()与PartOne()具有完全相同的代码,只是一个不同的名称。

拜托,我做错了什么?

2 个答案:

答案 0 :(得分: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静态。

答案 1 :(得分: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方法中的args:

@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;
    }