问题描述
我遇到了一个问题,当我从一个选项卡导航到另一个选项卡然后回到上一个选项卡时,我的数据不再显示在片段中。
这些是我的布局和viewpager的代码
tabLayout = (TabLayout) findViewById(R.id.tablayout);
Todaybooking = (TabItem) findViewById(R.id.Tab1);
Booking = (TabItem) findViewById(R.id.Tab2);
viewPager = findViewById(R.id.viewpager);
pagerAdapter = new FragmentAdapter(getSupportFragmentManager(),tabLayout.getTabCount());
viewPager.setAdapter(pagerAdapter);
tabLayout.setonTabSelectedListener(new TabLayout.OnTabSelectedListener() {
@Override
public void onTabSelected(TabLayout.Tab tab) {
viewPager.setCurrentItem(tab.getPosition());
if(tab.getPosition() == 0){
pagerAdapter.notifyDataSetChanged();
} else if (tab.getPosition() == 1){
pagerAdapter.notifyDataSetChanged();
}
}
@Override
public void onTabUnselected(TabLayout.Tab tab) {
}
@Override
public void onTabReselected(TabLayout.Tab tab) {
}
});
viewPager.addOnPagechangelistener(new TabLayout.TabLayoutOnPagechangelistener(tabLayout));
这些是我创建的fragmentadapter
public class FragmentAdapter extends FragmentPagerAdapter {
private int numoftabs;
public FragmentAdapter(@NonNull FragmentManager fm,int numoftabs) {
super(fm,numoftabs);
this.numoftabs = numoftabs;
}
@NonNull
@Override
public Fragment getItem(int position) {
switch(position){
case 0:
return new Todaybooking();
case 1:
return new Booking();
default:
return null;
}
}
@Override
public int getCount() {
return numoftabs;
}
@Override
public int getItemPosition(@NonNull Object object) {
return POSITION_NONE;
}
当我单击“预订”选项卡并导航回到上一个选项卡时,“今日预订”中的片段不会显示。
解决方法
这可能是因为您正在POSITION_NONE
中返回getItemPosition
,
在宿主视图试图确定项目位置是否已更改时调用。如果给定项目的位置未更改,则返回POSITION_UNCHANGED;如果适配器中不再存在该项目,则返回POSITION_NONE。
因此,删除getItemPosition
的替代项,通常是不需要的。
由于您指示每个片段的当前实例都不再位于片段列表中,这将导致每次访问包含它的选项卡时都重新创建该片段。