简体   繁体   English

如何在Android中刷新Pager选项卡片段?

[英]How to refresh the Pager tab fragment in android?

I have to refresh the fragment when I swipe to another fragment from the 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();
}

My Adapter is like this 我的适配器是这样的

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);
}
}

I tried all the ways to refresh my fragment . 我尝试了所有方法来刷新fragment If I swipe the tab or click the another tab then I need to refresh the visible tab again. 如果我滑动选项卡或单击另一个选项卡,则需要再次刷新可见的选项卡。 In my current fragment did not refresh. 在我目前的fragment中没有刷新。

please help me to override from this issue. 请帮助我解决此问题。

Try using Fragment state pager adapter than fragment adapter when you have to refresh tabs in your adapdter. 当必须刷新adapdter中的选项卡时,请尝试使用片段状态寻呼机适配器而不是片段适配器。

FragmentPagerAdapter stores the previous data which is fetched from the adapter while FragmentStatePagerAdapter takes the new value from the adapter everytime it is executed. FragmentPagerAdapter存储从适配器获取的先前数据,而FragmentStatePagerAdapter每次执行时都从适配器获取新值。

There's onHiddenChanged method in the fragment. 片段中有onHiddenChanged方法。

Called when the hidden state (as returned by isHidden() of the fragment has changed. Fragments start out not hidden; this will be called whenever the fragment changes state from that. 当片段的隐藏状态(由isHidden()返回)改变时调用。片段开始时不是隐藏的;只要片段从那改变了状态,就会调用此方法。

override the onHiddenChanged method in each of your tab fragment and if is not hidden do the refreshing. 覆盖每个选项卡片段中的onHiddenChanged方法,如果未被隐藏,请进行刷新。 For example: 例如:

class YourFragment extends Fragment {

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

}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM