【发布时间】:2015-04-01 14:21:51
【问题描述】:
我有一个ActionBarActivity,里面有一个ViewPager。我希望在四个(第一、第二、第三、第四)页中看到四个(第一、第二、第三、四个)片段。
问题:
- 我在第一页看到第二个片段。
- 然后我转到第二页。什么也没看到。
- 然后我回到第一页。看到第二个片段。
在ActionBarActvity 的onCreate() 中,我有:
mViewPager = (ViewPager) findViewById(R.id.pager);
mPagerAdapter = new MyPagerAdapter(getSupportFragmentManager(), mGoodArrayListOfWords);
mViewPager.setAdapter(mPagerAdapter);
MyPagerAdapter 的外观是这样的:
public class MyPagerAdapter extends FragmentPagerAdapter {
private ArrayList<String> mWords;
public MyPagerAdapter(FragmentManager fm, ArrayList<String> words) {
super(fm);
mWords = words;
}
@Override
public Fragment getItem(int position) {
String specificWord = mWords.get(position);
return MyFragment.newInstance(specificWord);
}
@Override
public int getCount() {
return mWords.size();
}
@Override
public CharSequence getPageTitle(int position) {
return mWords.get(position);
}
}
我使用静态工厂方法实例化了MyFragment,并将无参数构造函数设为私有:
public static MyFragment newInstance(String word) {
MyFragment fragment = new MyFragment();
Bundle args = new Bundle();
args.putString("WORD", word);
fragment.setArguments(args);
return fragment;
}
private MyFragment() {
super();
}
此外,在onViewOnCreated() 中,我获得了片段列表视图的句柄,使用LoaderManager 到init() 加载器。我在LoaderManager.LoaderCallbacks<Cursor> 的onLoadFinished() 中更新列表视图的适配器。
我认为问题是由于Loaders 在创建片段视图后完成了他们的工作。当我期望两个页面和两个片段时记录:
04-01 23:15:55.707 D/DebugTag﹕ getItem called
04-01 23:15:55.717 D/DebugTag﹕ getItem called
04-01 23:15:55.717 D/DebugTag﹕ on view created called
04-01 23:15:55.797 D/DebugTag﹕ on view created called
04-01 23:15:56.157 D/DebugTag﹕ on load finished called
04-01 23:15:56.177 D/DebugTag﹕ on load finished called
【问题讨论】:
-
我将
onViewCreated中的所有代码移至onCreateView。一切正常。
标签: android android-fragments android-viewpager fragment fragmentpageradapter