为什么片段 onCreateView 被调用两次?
Why fragment onCreateView being called twice?
我正在使用 viewpager,但片段有问题。
我的片段 onCreateView 被调用了两次。
这是我的代码
适配器:
public class QuestionAdapter extends FragmentStatePagerAdapter {
/**
* @param fm
* Fragment manager
*/
public QuestionAdapter(FragmentManager fm) {
super(fm);
}
/*
* (non-Javadoc)
*
* @see android.support.v4.app.FragmentStatePagerAdapter#getItem(int)
*/
@Override
public Fragment getItem(int position) {
if (position == 4) {
return InfoFragment.getInstance();
}
return QuestionFragment.getInstance(position);
}
/*
* (non-Javadoc)
*
* @see android.support.v4.view.PagerAdapter#getCount()
*/
@Override
public int getCount() {
return 5;
}
/*
* (non-Javadoc)
*
* @see
* android.support.v4.view.PagerAdapter#getItemPosition(java.lang.Object)
*/
@Override
public int getItemPosition(Object object) {
return POSITION_NONE;
}
我的片段代码:
public class QuestionFragment extends Fragment {
private int mPos;
@Bind(R.id.fragment_question_group_layout)
RadioGroup questionGroup;
public static QuestionFragment getInstance(int pos) {
QuestionFragment fragment = new QuestionFragment();
fragment.setPos(pos);
return fragment;
}
public void setPos(int pos) {
this.mPos = pos;
}
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container,
@Nullable Bundle savedInstanceState) {
LogUtil.e("QuestionFragment", "Pos : " + mPos);
View view = inflater.inflate(R.layout.fragment_question, container, false);
ButterKnife.bind(this, view);
switch (mPos) {
case 0 :
displayQuestion(getResources().getStringArray(R.array.question1_content));
break;
case 1 :
displayQuestion(getResources().getStringArray(R.array.question2_content));
break;
case 2 :
displayQuestion(getResources().getStringArray(R.array.question3_content));
break;
default :
displayQuestion(getResources().getStringArray(R.array.question4_content));
break;
}
return view;
}
这是日志:
- E/QuestionFragment﹕位置:0
- E/QuestionFragment﹕位置:1
- E/QuestionFragment﹕位置:2
- E/QuestionFragment﹕位置:3
- E/InfoFragment﹕位置:
- E/QuestionFragment﹕位置:0
- E/QuestionFragment﹕位置:0
- E/QuestionFragment﹕位置:0
- E/QuestionFragment﹕位置:0
- E/InfoFragment﹕位置:
编辑:
我已经设置:viewPager.setOffscreenPageLimit(4);在 activity
当我打开 activity 时得到上面的日志,没有滑动操作。只需打开 activity 并获取日志
我解决了我的问题,它是:
- 我的 phone 方向是:纵向
- 我的应用程序是:风景
当我 运行 我的应用程序时,由于配置更改,片段将重新创建。我放了
android:configChanges="keyboardHidden|screenSize|orientation"
在清单上然后一切正常
我正在使用 viewpager,但片段有问题。 我的片段 onCreateView 被调用了两次。 这是我的代码 适配器:
public class QuestionAdapter extends FragmentStatePagerAdapter {
/**
* @param fm
* Fragment manager
*/
public QuestionAdapter(FragmentManager fm) {
super(fm);
}
/*
* (non-Javadoc)
*
* @see android.support.v4.app.FragmentStatePagerAdapter#getItem(int)
*/
@Override
public Fragment getItem(int position) {
if (position == 4) {
return InfoFragment.getInstance();
}
return QuestionFragment.getInstance(position);
}
/*
* (non-Javadoc)
*
* @see android.support.v4.view.PagerAdapter#getCount()
*/
@Override
public int getCount() {
return 5;
}
/*
* (non-Javadoc)
*
* @see
* android.support.v4.view.PagerAdapter#getItemPosition(java.lang.Object)
*/
@Override
public int getItemPosition(Object object) {
return POSITION_NONE;
}
我的片段代码:
public class QuestionFragment extends Fragment {
private int mPos;
@Bind(R.id.fragment_question_group_layout)
RadioGroup questionGroup;
public static QuestionFragment getInstance(int pos) {
QuestionFragment fragment = new QuestionFragment();
fragment.setPos(pos);
return fragment;
}
public void setPos(int pos) {
this.mPos = pos;
}
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container,
@Nullable Bundle savedInstanceState) {
LogUtil.e("QuestionFragment", "Pos : " + mPos);
View view = inflater.inflate(R.layout.fragment_question, container, false);
ButterKnife.bind(this, view);
switch (mPos) {
case 0 :
displayQuestion(getResources().getStringArray(R.array.question1_content));
break;
case 1 :
displayQuestion(getResources().getStringArray(R.array.question2_content));
break;
case 2 :
displayQuestion(getResources().getStringArray(R.array.question3_content));
break;
default :
displayQuestion(getResources().getStringArray(R.array.question4_content));
break;
}
return view;
}
这是日志:
- E/QuestionFragment﹕位置:0
- E/QuestionFragment﹕位置:1
- E/QuestionFragment﹕位置:2
- E/QuestionFragment﹕位置:3
- E/InfoFragment﹕位置:
- E/QuestionFragment﹕位置:0
- E/QuestionFragment﹕位置:0
- E/QuestionFragment﹕位置:0
- E/QuestionFragment﹕位置:0
- E/InfoFragment﹕位置:
编辑: 我已经设置:viewPager.setOffscreenPageLimit(4);在 activity 当我打开 activity 时得到上面的日志,没有滑动操作。只需打开 activity 并获取日志
我解决了我的问题,它是:
- 我的 phone 方向是:纵向
- 我的应用程序是:风景
当我 运行 我的应用程序时,由于配置更改,片段将重新创建。我放了
android:configChanges="keyboardHidden|screenSize|orientation"
在清单上然后一切正常