尽管我的选项卡已被选中,但我每次都想刷新我的选项卡片段

I want to refresh my tab fragment every time though my tab is already selected

我使用View-pager设置标签。当我单击任何类别从 Internet 加载数据时,在类别选项卡内,我将所有类别和数据加载隐藏在 recycleview 内。但现在当我点击类别选项卡时,我想在查看之前看到。请注意:我想单击同一个选项卡,每次都需要刷新。请检查图片以便更好地理解。请检查我的收养者 class。

 viewPager = (CustomViewPager) findViewById(R.id.tabs_viewpager);
        // viewPager.setPagingEnabled(false);
        tabLayout = (TabLayout) findViewById(R.id.tabs);
        tabLayout.setupWithViewPager(viewPager);

        tabFragmentPagerAdapter = new TabFragmentPagerAdapter(getSupportFragmentManager(), MainActivity.this, viewPager);
        tabFragmentPagerAdapter.addFrag(new FeatureFragment(), "Feature");
        tabFragmentPagerAdapter.addFrag(new DiscoverFragment(), "Discover");
        tabFragmentPagerAdapter.addFrag(new TopFragment(), "Top");
        tabFragmentPagerAdapter.addFrag(new CategoryFragment(), "Category");
        // setupViewPager(viewPager);
        viewPager.setAdapter(tabFragmentPagerAdapter);

我的收养者class

public class TabFragmentPagerAdapter extends FragmentPagerAdapter {

    private final List<Fragment> mfragmentlist = new ArrayList<>();
    private final List<String> mFragmentTitleList = new ArrayList<>();
    FragmentManager fragmentManager;
    final int[] ICONS = new int[]{
            R.drawable.feature,
            R.drawable.discover,
            R.drawable.top,
            R.drawable.category};
    public Context context;

    public ViewPager viewPager;


    public TabFragmentPagerAdapter(FragmentManager fm, Context context, ViewPager viewPager) {
        super(fm);
        this.context = context;
        this.viewPager = viewPager;
        this.fragmentManager = fm;

    }

    public View getTabView(int position) {
        // Given you have a custom layout in `res/layout/custom_tab.xml` with a TextView and ImageView
        View v = LayoutInflater.from(context).inflate(R.layout.custom_tab, null);
        final TextView tv = (TextView) v.findViewById(R.id.textViewMainTabFrag);
        tv.setText(mFragmentTitleList.get(position));
        ImageView img = (ImageView) v.findViewById(R.id.imgView);
        img.setImageResource(ICONS[position]);

        return v;
    }

    public void SetOnSelectView(TabLayout tabLayout, int position) {
        TabLayout.Tab tab = tabLayout.getTabAt(position);
        View selected = tab.getCustomView();
        TextView iv_text = (TextView) selected.findViewById(R.id.textViewMainTabFrag);
        iv_text.setTextColor(context.getResources().getColor(R.color.apps_color));
    }

    public void SetUnSelectView(TabLayout tabLayout, int position) {
        TabLayout.Tab tab = tabLayout.getTabAt(position);
        View selected = tab.getCustomView();
        TextView iv_text = (TextView) selected.findViewById(R.id.textViewMainTabFrag);
        iv_text.setTextColor(context.getResources().getColor(R.color.black));
    }

    public void addFrag(Fragment fragment, String title) {
        mfragmentlist.add(fragment);
        mFragmentTitleList.add(title);
    }

    /*    @Override
        public Fragment getItem(int position) {
            return ItemFragment.newInstance();
        }*/
    @Override
    public Fragment getItem(int position) {
        return mfragmentlist.get(position);
    }

    @Override
    public int getCount() {
        return mFragmentTitleList.size();
    }

    @Override
    public CharSequence getPageTitle(int position) {
        return mFragmentTitleList.get(position);
    }
}

main activity OnTabSelectedListener 这里是重新加载 activity 的好选择。但是如何以及如何显示我的视图

  @Override
        public void onTabUnselected(TabLayout.Tab tab) {
            int c = tab.getPosition();
            tabFragmentPagerAdapter.SetUnSelectView(tabLayout, c);
        }

试试这个...

public class ListCanali extends Fragment implements OnPageChangeListener{

    private MyAdapter mAdapter;

@Override
public View OnCreateView (...) {
...
if(mAdapter == null) {
   mAdapter = new MyAdapter(getChildFragmentManager());
 }
 viewPager.setAdapter(mAdapter);
 viewPager.setOnPageChangeListener(this);
 ...
}

@Override
public void OnPageSelected (int position) {
switch (position){
        case 0 :
          ((FragmentCanali)adapter.getItem(position)).refresh();

        case 1 : 
          ((FragmentPreferiti)adapter.getItem(position)).refresh();
    }
}

你可以使用 setUserVisibleHint :

在你的fragment中:

@Override
    public void setUserVisibleHint(boolean isVisibleToUser) {
        super.setUserVisibleHint(isVisibleToUser);
        if (isVisibleToUser){
         //do something  //Load or Refresh Data
        }
    }

在你的Activity中:

viewPager.addOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() {
    @Override
    public void onPageSelected(int position) {
        // do something  //Load or Refresh Data
    } 
});

检查this 解决方案