1

我有一个 PagerFragmentAdapter 有两个选项卡,但只有一个片段 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 }

如所描述的那样使用,片段的两个实例以相同的方式运行,给出相同的结果(就像 partChosen == 2 即使它不是)。但是,当我在案例 1 中将 Fragment 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 回答