导航回到上一个选项卡后未显示数据

时间:2020-11-05 09:16:18

标签: android android-fragments android-viewpager 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));

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

enter image description here

当我单击“预订”选项卡并导航回到上一个选项卡时,“今日预订”中的片段不会显示。

1 个答案:

答案 0 :(得分:1)

这可能是因为您正在POSITION_NONE中返回getItemPosition

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

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

因此,删除getItemPosition的替代项,通常是不需要的。

由于您指示每个片段的当前实例都不再位于片段列表中,这将导致每次访问包含它的选项卡时都重新创建该片段。