ViewPager + FragmentStatePagerAdapter:当屏幕方向改变时,ViewPager停止工作

5
我正在使用ActionBarSherlock(它基本上是Android Support Package的扩展)。
我想做的是:
我有一个FragmentActivity,它只托管一个ViewPager。这个ViewPager有一个FragmentStatePagerAdapter(因为将来会有很多项)。但是现在只有两个项目用于测试。
在纵向方向时一切正常。但是当我改变为横向方向时,它会切换回适配器中的第一个项目(这很好,因为所有内容都被重新加载等),但我无法滑动到下一个项目。什么也没有发生。
从调试中,我可以看到Loader很好地返回了两个项目。getItem(...)也使用位置0和1调用。所以基本上一切看起来都很好,除了它不是 ;)
顺便说一下:当我从横向方向开始并切换到纵向方向时,反之亦然。
这是我的一些代码:
public class QuotesStatePagerAdapter extends FragmentStatePagerAdapter {

private List<Quote> mQuotes;

public QuotesStatePagerAdapter(FragmentManager fm, List<Quote> quotes) {
    super(fm);
    mQuotes = quotes;
}

@Override
public Fragment getItem(int position) {
    Bundle arguments = new Bundle();
    arguments.putSerializable("quote", mQuotes.get(position));
    QuoteFragment fragment = new QuoteFragment();
    fragment.setArguments(arguments);
    return fragment;
}

@Override
public int getCount() {
    return mQuotes.size();
}

}

public QuotesFragment() {
}

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
}

public void updateOrdering(ORDERING newOrdering) {
    mOrdering = newOrdering;
    getLoaderManager().getLoader(0).startLoading();
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
    return inflater.inflate(R.layout.quotes, container, false);
}

@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
    super.onViewCreated(view, savedInstanceState);
    mViewPager = (ViewPager) view.findViewById(R.id.viewpager);
    mViewPager.setOnPageChangeListener(this);
}

@Override
public void onActivityCreated(Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);
    getLoaderManager().initLoader(0, null, this);
}

@Override
public Loader<List<Quote>> onCreateLoader(int id, Bundle args) {
    return new QuotesLoader(getActivity(), mCategoryId);
}

@Override
public void onLoadFinished(Loader<List<Quote>> loader, List<Quote> data) {
    mQuotes = data;
    mViewPager.setAdapter(new QuotesStatePagerAdapter(
            getSupportFragmentManager(), mQuotes));
}
2个回答

12

2
在onCreate里调用setRetainInstance(true)方法就可以解决问题了!谢谢。 - passsy

-2

尝试在Activity标签内的清单中添加android:configChanges="orientation"


在我的项目中,当我初始化选项卡主机时,我已经注释掉了选项卡初始化的部分。protected void onCreate(Bundle savedInstanceState){ this.initialiseTabHost(savedInstanceState); /*if (savedInstanceState != null) { mTabHost.setCurrentTabByTag(savedInstanceState.getString("tab")); //set the tab as per the saved state }*/ } 当与 android:configChanges="orientation" 结合使用时,这为我解决了方向错误问题。 - JackMahoney

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