导航回上一个选项卡后未显示数据
Posted
技术标签:
【中文标题】导航回上一个选项卡后未显示数据【英文标题】:Data not showing after navigation back to the previous tab 【发布时间】: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
)的许多问题。
【参考方案1】:
这可能是因为您在getItemPosition
中返回POSITION_NONE
,即
当宿主视图试图确定一个项目的位置是否改变时调用。如果给定项目的位置未更改,则返回 POSITION_UNCHANGED;如果该项目不再存在于适配器中,则返回 POSITION_NONE。
来自https://developer.android.com/reference/androidx/viewpager/widget/PagerAdapter#getItemPosition(java.lang.Object)
所以删除getItemPosition
的覆盖,你通常不需要这个。
因为您表明每个 Fragment 的当前实例不再在 Fragment 列表中,所以每次访问包含它的 Tab 时都会重新创建 Fragment。
【讨论】:
以上是关于导航回上一个选项卡后未显示数据的主要内容,如果未能解决你的问题,请参考以下文章