我使用的是ActionBarSherlock(基本上是Android支持包的擴展)。ViewPager + FragmentStatePagerAdapter:ViewPager在屏幕方向更改時停止工作
我想要做的是以下幾點:
我有一個FragmentActivity
它承載只是一個單一的ViewPager
。這ViewPager
有一個FragmentStatePagerAdapter
(因爲將來會有很多項目)。但現在它只裝載了2個項目進行測試。
一切都很好,而我在縱向方向。但是,當我改變如此橫向方向時,它會切換回適配器中的第一項(這是好的,因爲一切都重新加載等),但我無法Swype到下一個項目。沒有什麼事情發生。
從調試我可以看到,Loader
返回這兩個項目就好了。 getItem(...)
也被稱爲position
0和1.所以basicall一切看起來很好,除了它不是;)
btw:同樣的事情發生反之亦然,當我開始在景觀方向和切換到縱向方向。
任何想法可能是錯誤的嗎?
下面是我的一些代碼:
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));
}
不會改變行爲... – Goddchen 2012-02-18 16:05:28
在我的項目中,當我初始化標籤主機時,我註釋掉了標籤初始化'protected void onCreate(Bundle savedInstanceState){this。 initialiseTabHost(savedInstanceState); (保存實例狀態!=空){ mTabHost.setCurrentTabByTag(savedInstanceState.getString(「tab」)); //根據已保存的狀態設置標籤 } * /}'解決了與android:configChanges =「orientation」結合使用時的方向錯誤'' – JackMahoney 2012-02-18 21:41:06