android - 导航回上一个选项卡后未显示数据
问题描述
我遇到了一个问题,当我从一个选项卡导航到另一个选项卡然后返回上一个选项卡时,我的数据不再显示在片段中。
这些是我的 tablayout 和 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));
这些是我创建的片段适配器
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
所以删除你通常不需要的覆盖。
因为您指出每个片段的当前实例不再在片段列表中,所以每次访问包含它的选项卡时都会重新创建片段。
推荐阅读
- ios - Google Vision API 可能存在内存泄漏
- android - Koin vs Kodein - 依赖注入你更喜欢什么?科特林
- javascript - 类型错误:context.getters.Function 不是 Vuex 的函数
- asp.net - 使用 ViewModel 时,对象不会从视图传递到控制器
- groovy - 如何在 Jmeter 中运行 shell 脚本 - Groovy
- android - 开放式回答问卷应用程序的片段或活动
- ios - UIPageViewController 中的 InputAccessoryView 默认不显示
- mongodb - 从 MongoDB 中的所有对象中获取一些值
- c# - 在多目标项目中使用 TextReader
- python - PyQT5 未找到 zlib 错误