Android Viewpager如何保存页面状态?

时间:2014-05-13 19:30:11

标签: android android-intent android-fragments android-listview android-viewpager

我有一个名为QuoteFragment的片段,我将在其中显示引号。我创建了一个名为QuoteViewPager的活动,它将托管QutoeFragment。我有另一个活动和片段为列表视图的相同报价。如果用户在视图寻呼机中位于引号#50中,并且如果它们转到列表视图并再次返回查看寻呼机,那么查看寻呼机将从报价#1开始显示。我想从Qutoe#50开始显示视图寻呼机。以下方式我试了但是没有用。 在我的片段类中:

@Override
public void onSaveInstanceState(Bundle outState) {
    super.onSaveInstanceState(outState);
    outState.putInt(PAGE_ITEM((QuoteViewPager)getActivity()).getViewPager().getCurrenttem());


    }

这里getViewPager在我的QuoteViewPager扩展FragmentActivity类中有以下代码:

public ViewPager getViewPager(){

        if(quoteViewPager == null){
            quoteViewPager = new ViewPager(this);
            quoteViewPager.setId(R.id.quoteViewPager);
        }

        return quoteViewPager;
    }

在onCreate(Bundle saveInstanceState)中的相同片段中,我输入了以下代码:

if(savedInstanceState != null){
        ((QuoteViewPager)getActivity()).getViewPager().setCurrentItem(savedInstanceState.getInt(PAGE_ITEM,0));
}

当我调试它时,我发现我的PAGE_ITEM有50个值,但在onCreate方法中savedInstanceState始终为null。 有人可以帮我这个吗?

1 个答案:

答案 0 :(得分:1)

首先,您需要将值设置为Bundle中的键值对。 并覆盖onRestoreInstanceState以恢复状态

@Override
public void onSaveInstanceState(Bundle outState) {
  super.onSaveInstanceState(outState);
  outState.putInt("quoteNumber", PAGE_ITEM((QuoteViewPager)getActivity()).getViewPager().getCurrenttem());
}


@Override
public void onRestoreInstanceState(Bundle savedInstanceState) {
  super.onRestoreInstanceState(savedInstanceState);
  int quoteNumber = savedInstanceState.getInt("quoteNumber");
}