如何刷新Android中的Pager Tab片段



我必须从选项卡刷到另一个fragment时,必须刷新fragment

@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setRetainInstance(true);
}

@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
    super.onCreateView(inflater, container, savedInstanceState);
    mBinding = DataBindingUtil.inflate(inflater, R.layout.manage_work_shop_act, container, false);

    mBinding.layout.title.setText(getString(R.string.d_manage_my_staff));
    mBinding.tabs.setupWithViewPager(mBinding.viewpager);
    setupViewPager(mBinding.viewpager);
    mBinding.layout.nav.setVisibility(View.GONE);
    mBinding.layout.navMenu.setVisibility(View.VISIBLE);
    mBinding.layout.navMenu.setOnClickListener(view -> openDrawer());
    return mBinding.getRoot();
}

private void setupViewPager(ViewPager viewPager) {
    ViewPagerAdapter adapter = new ViewPagerAdapter(getChildFragmentManager());
    int limit = (adapter.getCount() > 1 ? adapter.getCount() - 1 : 1);
    adapter.addFragment(new MechanicListFragment(), getString(R.string.d_manage_my_staff));
    adapter.addFragment(new MechanicNewFragment(), getString(R.string.new_frag));
    viewPager.setAdapter(adapter);
    viewPager.setOffscreenPageLimit(limit);
    adapter.notifyDataSetChanged();
}

我的适配器就像这个

public class ViewPagerAdapter extends FragmentPagerAdapter {
private final List<Fragment> mFragmentList = new ArrayList<>();
private final List<String> mFragmentTitleList = new ArrayList<>();
public ViewPagerAdapter(FragmentManager manager) {
    super(manager);
}
@Override
public Fragment getItem(int position) {
    return mFragmentList.get(position);
}
@Override
public int getCount() {
    return mFragmentList.size();
}
public void addFragment(Fragment fragment, String title) {
    mFragmentList.add(fragment);
    mFragmentTitleList.add(title);
}
@Override
public CharSequence getPageTitle(int position) {
    return mFragmentTitleList.get(position);
}
}

我尝试了所有方法来刷新我的fragment。如果我滑动选项卡或单击另一个选项卡,则需要再次刷新可见的选项卡。在我目前的fragment中,没有刷新。

请帮助我从这个问题上覆盖。

尝试使用片段状态适配器而不是片段适配器,当您必须在贴花中刷新标签时。

fragmentPagerAdapter存储从适配器获取的先前数据,而fragmentStatePagerAdapter每次执行适配器都会从该适配器中获取新值。

片段中有onhidendchanged方法。

当隐藏状态(由Ishidden()返回)时调用 碎片已经改变。片段开始并非隐藏;这会是 每当碎片从此改变状态时调用。

在每个标签片段中覆盖onHiddenChanged方法,如果不隐藏,请刷新。例如:

class YourFragment extends Fragment {
    @Override public void onHiddenChanged(boolean hidden) {
        super.onHiddenChanged(hidden);
        if (!hidden) {
            //you can refresh here now
        }
    }
}

最新更新