在Android中旋转后获取ViewPager的位置

5
我有一个ViewPager。我的FragmentPageAdapter在getItem()方法中返回Viewpager的位置。但是在旋转屏幕后,该方法不返回任何值。为什么?如果我理解正确,每次旋转屏幕时都会调用OnCreateView(),但为什么它不再返回值呢?能否指出如何解决?谢谢。
编辑:我的FragmentPageAdapter:
public Fragment getItem(int position) {

   return Fragment_results.newInstance(position);
}

我的Fragment:

public static Fragment_results newInstance(int i) {

    Fragment_results fragment = new Fragment_results();
    fragment.mContent = i +"";

    return fragment;
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.layout_result, null);
    ((TextView) view.findViewById(R.id.text)).setText(mContent);

1
你的意思是它没有返回值?getItem()方法是你的PagerAdapter的一部分。它是否返回值完全取决于你的实现。ViewPager#getCurrentItem()将返回ViewPager的编号位置,该位置可能在屏幕旋转时重置为0。 - DeeV
我编辑了问题并包含了我的代码。但为什么它被重置为0? - Ahmad
1个回答

12
在创建ViewPager实例和设置新适配器时,位置会被设置为0。当调用onCreateView()时,本质上是在重建整个应用程序。为了恢复到原来的位置,您必须首先使用onSavedInstanceState(Bundle savedInstanceState)并通过Bundle存储项目位置。
@Override
protected void onSaveInstanceState(Bundle outState) {
  super.onSaveInstanceState(outState);
  outState.putInt("pageItem", myViewPager.getCurrentItem());
}

然后在onCreate中像这样恢复viewPager的状态:

if (savedInstanceState != null) {
  myViewPager.setCurrentItem(savedInstanceState.getInt("pageItem", 0));
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接