【发布时间】:2021-02-17 23:37:22
【问题描述】:
我遇到了一个问题,当我从一个选项卡导航到另一个选项卡然后返回上一个选项卡时,我的数据不再显示在片段中。
这些是我的 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;
}
当我单击预订选项卡并导航回上一个选项卡后,今日预订的片段不会显示。
【问题讨论】:
-
super(fm, numoftabs);第二个参数是一种行为,而不是标签的数量。 -
可以在 onResume() 方法中设置数据。当回到上一个选项卡时,调用 onResume()。我不知道这是最好的方法。
-
在您的
getItem()方法中,您每次都返回一个新的Fragment实例。因此,您的“Todaybooking”Fragment和“Booking”Fragment的先前实例已“丢失”(以及其中存储的任何状态)。查看ViewPager2,因为它旨在解决原始ViewPager(以及与ViewPager一起使用的Adapter)的许多问题。
标签: android android-fragments android-viewpager android-tablayout