【发布时间】: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