我不想每次都刷新我的标签片段,虽然我的标签已被选中

问题描述:

我用View-pager设置选项卡。内部类别选项卡,当我点击任何类别的负载数据从互联网,我隐藏所有类别和数据加载recycleview内。但现在当我点击类别选项卡时,我希望在查看之前可见。请注意:我想单击相同的选项卡,每次需要刷新。请检查图像以获得更好的理解。请检查我的采用者课程。我不想每次都刷新我的标签片段,虽然我的标签已被选中

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

我采纳者类

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

主要活动OnTabSelectedListener这里将是重装activity不错的选择。但如何如何看到我的看法

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

enter image description here

+0

显示适配器。 – Ankita

+0

试试这个https://*.com/questions/19744261/how-to-update-refresh-fragment-in-viewpager-by-main-activity-programmatically – Ankita

+0

请检查您想更新你的片段在我的编辑代码 –

您可以使用setUserVisibleHint

在你fragment

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

OR

在你Activity

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

检查this解决方案

+0

是你的问题解决了[email protected] –

+0

没有..还是尽量解决 –

+0

你去哪里stucked? –

尝试......

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(); 
    } 
} 
+0

((CategoryFragment)mAdapter.getItem(3).REFRESH()); refresh()not found –

+0

@ t.gakk你需要在你的类中创建这个函数来刷新。 –