【问题标题】:For Multiple Tabs Single Fragment not working getItem called twice对于多个选项卡单个片段不起作用 getItem 调用了两次
【发布时间】:2017-06-07 14:02:39
【问题描述】:

先生,我必须为多个标签使用单个片段。我已经使用 FragmentStatePagerAdapter 实现了它,但在调试后我发现一些选项卡显示数据但不正确。这是因为 getItem 调用了两次请尽早帮助我。

我已经从 getItem 传递了参数。它传递参数两次,因为 getItem 调用两次。因此它会覆盖参数数据。我有 6 个选项卡,但只有 1、3 和 5 个选项卡显示数据,但数据是第 2、4 和 6 个选项卡,而第 2、4 和 6 个选项卡在屏幕上没有显示任何内容。

没有解决之前问题的任何解决方案。

查看页面代码

public class ViewPagerAdapter extends FragmentStatePagerAdapter {

int TAB_COUNT=5;
Context mContext;
public ViewPagerAdapter(FragmentManager fm,Context context) {
    super(fm);
    mContext=context;
}

@Override
public Fragment getItem(int position) {
    NewsFragment fragment = new NewsFragment();
    Bundle args = new Bundle();
    args.putString("title", String.valueOf(getPageTitle(position)));
    args.putString("data", "data");
    fragment.setArguments(args);
    return fragment;

}

@Override
public CharSequence getPageTitle(int position) {

    return  mContext.getResources().getStringArray(R.array.tabs)[position];
}

@Override
public int getCount() {
    return TAB_COUNT;
}

}

听众改变标签:

@Override
public void onTabSelected(TabLayout.Tab tab) {
    viewPager.setCurrentItem(tab.getPosition());

}



@Override
public void onPageSelected(int position) {

    TabLayout.Tab tab = tabLayout.getTabAt(position);
    if (tab != null) {
        tab.select();
    }
}

适配器设置

 private void setUpTab() {
    viewPagerAdapter = new ViewPagerAdapter(getSupportFragmentManager(), this);
    for (int i = 0; i < viewPagerAdapter.getCount(); i++) {
        tabLayout.addTab(
                tabLayout.newTab()
                        .setText(viewPagerAdapter.getPageTitle(i)));
    }
    tabLayout.setTabGravity(TabLayout.GRAVITY_FILL);
    viewPager.setAdapter(viewPagerAdapter);
    viewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tabLayout));
    viewPager.addOnPageChangeListener(this);
    tabLayout.addOnTabSelectedListener(this);
}

【问题讨论】:

    标签: android android-fragments android-viewpager android-tabs


    【解决方案1】:

    每次适配器第一次创建新页面时都会调用getItem。您看到它被调用两次的原因是 viewPager 提前准备了下一页,所以如果您输入第 1 页,则页面 2 也已经被创建,以便在您向右滑动时更快地分页。

    为了进一步帮助您,请向我们展示 NewsFragment 的代码。

    此外,您可能会考虑使用 FragmentPagerAdapter 而不是 FragmentStatePagerAdapter,因为您似乎有固定数量的选项卡(在您的示例中为 5 个)并且根据文档是 FragmentPagerAdapter 的用例。

    来自我上面链接的页面的文档:

    此版本的分页器最适合在需要分页的情况下使用少数通常更静态的片段,例如一组选项卡。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-08-31
      • 1970-01-01
      • 2018-04-13
      • 2016-12-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多