【问题标题】:FragmentPagerAdapter showing fragments wrongly in ViewPagerFragmentPagerAdapter 在 ViewPager 中错误地显示片段
【发布时间】: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&lt;Cursor&gt; 的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


【解决方案1】:

在您使用getItem() 方法时扩展FragmentStatePagerAdapter。如果你想保留它FragmentPagerAdapter 覆盖instantiateItem()。

【讨论】:

  • 我也试过 FragmentStatePagerAdapter;但它给了我同样的行为。
  • 尝试覆盖 instantiateItem() 并从那里调用您的片段
  • thx 我怀疑问题是当我在第一页时,我有一个带有空列表视图的片段,然后由第一个加载器带回的内容被第二个装载机...
  • 我也面临这个问题。你解决了这个问题吗? @乔纳斯
  • @RakeshL 你试过把东西移到onCreateView吗?
猜你喜欢
  • 1970-01-01
  • 2019-12-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-16
  • 2016-03-02
相关资源
最近更新 更多