2017-08-01 5 views
2

Quelque chose de bizarre se passe ici, j'ai créé une application flux rss avec pager vue quand je vais à 2ème onglet de l'1er onglet, le contenu de 3ème onglet arrivent à 2ème tab. Quand je vais à l'1er onglet de 2ème onglet, le contenu de 1er onglet arrivent à 2ème onglet. quelque chose mélangeant sans aucune logique (ou je ne pouvais pas trouver la logique), pourquoi ça se passe ..? est-il possible de dégager l'onglet en cours avant d'aller à l'onglet suivant? (ne savent pas que ce soit la bonne question que je devais demander)activité Android Tabbed duplication onglets

take a look

Voici mon code

public class datafragment extends Fragment { 
View view; 
ViewPager viewPager; 
TabLayout tabLayout; 


@Nullable 
@Override 
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { 
    view= inflater.inflate(R.layout.sample,container,false); 


    viewPager = (ViewPager) view.findViewById(R.id.viewpager); 
    viewPager.setAdapter(new sliderAdapter(getChildFragmentManager())); 
    tabLayout = (TabLayout) view.findViewById(R.id.sliding_tabs); 
    tabLayout.post(new Runnable() { 
     @Override 
     public void run() { 
      tabLayout.setupWithViewPager(viewPager); 
     } 
    }); 

    return view; 

} 

private class sliderAdapter extends FragmentPagerAdapter{ 

    final String tabs[]={"tab1", "tab2","tab3"}; 
    public sliderAdapter(FragmentManager fm) { 
     super(fm); 
    } 

    @Override 
    public Fragment getItem(int position) { 
     Fragment fragment= null; 
     switch (position){ 
      case 0: 
       fragment = new RssFragment(); 
       break; 

      case 1: 
       fragment = new RssFragment1(); 
       break; 
      case 2: 
        fragment = new RssFragment2(); 
       break; 
     } 
     return fragment; 
    } 

    @Override 
    public int getCount() { 


     return 3; 
    } 
    @Override 
    public CharSequence getPageTitle(int position) { 
     return tabs[position]; 
    } 
} 

} 

après avoir ajouté la réponse

public class datafragment extends Fragment { 
View view; 
ViewPager viewPager; 
TabLayout tabLayout; 


@Nullable 
@Override 
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { 


    view= inflater.inflate(R.layout.sample,container,false); 
    viewPager = (ViewPager) view.findViewById(R.id.viewpager); 
    viewPager.setAdapter(new SliderAdapter(getChildFragmentManager())); 
    tabLayout = (TabLayout) view.findViewById(R.id.sliding_tabs); 
    // tabLayout.post(new Runnable() { 
    //  @Override 
    //  public void run() { 
    //   tabLayout.setupWithViewPager(viewPager); 
    //  } 
    // }); 

    **setupViewPager(viewPager);** 

    return view; 

} 



private void setupViewPager(ViewPager viewPagerProfile) 
{ 
    SliderAdapter adapter = new SliderAdapter (getActivity().getSupportFragmentManager()); 
    adapter.addFragment(new RssFragment(), "tab1"); 
    adapter.addFragment(new RssFragment1(), "tab2"); 
    adapter.addFragment(new RssFragment2(), "tab3"); 

    viewPagerProfile.setAdapter(adapter); 
} 

public class SliderAdapter extends FragmentPagerAdapter 
{ 
    private final List<Fragment> mFragmentList = new ArrayList<>(); 
    private final List<String> mFragmentTitleList = new ArrayList<>(); 

    public SliderAdapter (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 null; 
    } 
} 


} 
+0

S'il vous plaît ajouter votre fichier xml –

+0

S'il vous plaît se référer à la question @AyushKhare –

+0

Avec votre capture d'écran, beaucoup de choses sont devenues plus claires. Vous voudrez peut-être jeter un oeil à ce https://stackoverflow.com/questions/37315602/weird-tab-behavior-whats-wrong-with-the-adapter –

Répondre

0

Essayez de cette façon:

private void setupViewPager(ViewPager viewPagerProfile) 
     { 
      SliderAdapter adapter = new SliderAdapter (getSupportFragmentManager()); 
      adapter.addFragment(new RssFragment(), "tab1"); 
      adapter.addFragment(new RssFragment1(), "tab2"); 
      adapter.addFragment(new RssFragment2(), "tab3"); 

      viewPagerProfile.setAdapter(adapter); 
     } 

Adaptateur personnalisé:

public class SliderAdapter extends FragmentPagerAdapter 
{ 
    private final List<Fragment> mFragmentList = new ArrayList<>(); 
    private final List<String> mFragmentTitleList = new ArrayList<>(); 

    public SliderAdapter (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 null; 
    } 
} 

Si vous voulez faire quelque chose sur fragment sélectionné, Ajouter listenre:

TabLayout.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() 
{ 
    @Override public void onTabSelected(TabLayout.Tab tab) 
    { 
     //Code here for selected fragment 
    } 

    @Override public void onTabUnselected(TabLayout.Tab tab) 
    { 

    } 

    @Override public void onTabReselected(TabLayout.Tab tab) 
    { 

    } 
}); 
+0

donc je dois créer un adaptateur anthère? –

+0

Je n'ai pas compris votre point, pouvez-vous éditer la réponse en fonction de mes valeurs? –

+0

remplacez simplement votre adaptateur par le mien et appelez setupViewPager dans oncreate. – Akshay