我有一个带有两个标签但只有一个片段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()具有完全相同的代码,只是一个不同的名称。
拜托,我做错了什么?
答案 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;
}