首页 > 解决方案 > 导航回上一个选项卡后未显示数据

问题描述

我遇到了一个问题,当我从一个选项卡导航到另一个选项卡然后返回上一个选项卡时,我的数据不再显示在片段中。

这些是我的 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;
}

在此处输入图像描述

一旦我单击预订选项卡并导航回上一个选项卡,今天预订的片段就不会显示。

标签: androidandroid-fragmentsandroid-viewpagerandroid-tablayout

解决方案


这可能是因为您要返回POSITION_NONEgetItemPosition

当宿主视图试图确定项目的位置是否已更改时调用。如果给定项的位置未更改,则返回 POSITION_UNCHANGED;如果该项不再存在于适配器中,则返回 POSITION_NONE。

来自https://developer.android.com/reference/androidx/viewpager/widget/PagerAdapter#getItemPosition(java.lang.Object)

getItemPosition所以删除你通常不需要的覆盖。

因为您指出每个片段的当前实例不再在片段列表中,所以每次访问包含它的选项卡时都会重新创建片段。


推荐阅读