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

God*_*hen 5 android android-fragments android-viewpager actionbarsherlock

我正在使用ActionBarSherlock(它基本上是Android支持包的扩展).

我想要做的是以下内容:

我有一个FragmentActivity主机只有一个ViewPager.这ViewPager有一个FragmentStatePagerAdapter(因为将来会有很多项目).但是现在它只加载了2个项目进行测试.

当我在纵向方向时,一切都很好.但是当我更改横向方向时,它会切换回适配器中的第一项(这很好,因为所有内容都重新加载等),但我无法转到下一个项目.没有任何事情发生.

从调试我可以看到Loader返回两个项目就好了.getItem(...)也被称为position0和1.所以basicall一切看起来很好,除了它不是;)

顺便说一下:当我从风景画开始并切换到纵向方向时,同样的事情发生了反过来.

任何想法在这里可能是错的?

这是我的一些代码:

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();
}
Run Code Online (Sandbox Code Playgroud)

}

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));
}
Run Code Online (Sandbox Code Playgroud)

小智 12

android:configChanges ="orientation"就像一个魅力,但我看到它不是由android团队推荐的(只有最后一个案例资源)...见这里http://developer.android.com/guide/topics/manifest/activity -element.html#配置

我发现put:setRetainInstance(true); 在onCreateView上保留了每个片段的实例.(请注意,将再次调用onActivityCreated)

  • setRetainInstance(真); 在onCreate是解决方案!谢谢 (2认同)

Jac*_*ney -2

尝试添加android:configChanges="orientation"到 Activity 标记内的清单