0

J'utilise View-pager pour définir l'onglet. à l'intérieur de l'onglet catégorie lorsque je clique sur une catégorie de données de chargement à partir d'Internet et je cache toutes les catégories et les données à l'intérieur recycleview. mais maintenant, quand je clique sur l'onglet catégorie que je veux voir avant la vue. note s'il vous plaît: Je veux cliquer sur le même onglet et chaque fois qu'il doit rafraîchir. s'il vous plaît vérifier l'image pour mieux comprendre. S'il vous plaît vérifier ma classe d'adoption.Je souhaite rafraîchir mon fragment d'onglet à chaque fois que mon onglet est déjà sélectionné

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

classe Mon adopteur

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

activité principale OnTabSelectedListener ici sera bonne option pour recharger activity. mais comment et comment visible mon avis

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

enter image description here

+0

montrer votre adaptateur. – Ankita

+0

essayez ce https://stackoverflow.com/questions/19744261/how-to-update-refresh-fragment-in-viewpager-by-main-activity-programmatically – Ankita

+0

S'il vous plaît vérifier mon code d'édition –

Répondre

2

vous pouvez utiliser setUserVisibleHint:

Dans votre fragment:

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

OU

Dans votre Activity:

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

check this solutions

+0

est votre problème résolu [email protected] –

+0

non .. encore essayer de résoudre –

+0

où avez-vous bloqué? –

1

Try this ...

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() non trouvé –

+0

@ t.gakk vous devez créer cette fonction dans votre classe pour l'actualiser. –