简体   繁体   中英

How to refresh the Pager tab fragment in android?

I have to refresh the fragment when I swipe to another fragment from the Tab.

@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 . 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.

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.

FragmentPagerAdapter stores the previous data which is fetched from the adapter while FragmentStatePagerAdapter takes the new value from the adapter everytime it is executed.

There's onHiddenChanged method in the fragment.

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.

override the onHiddenChanged method in each of your tab fragment and if is not hidden do the refreshing. For example:

class YourFragment extends Fragment {

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

}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

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