2017-04-25 3 views
0

Je souhaite ajouter une barre de catégorie dans la page ViewPager. Le titre de la catégorie change selon le changement de page ViewPager. Tandis que j'ai essayé de faire ceci ViewPager fonctionnant bien mais le titre ne change pas.Viewpager Set Texte Fonction

c'est la mise en page:

enter image description here

j'ai ajouté le code ci-dessous dans PagerAdapter:

private class MyPagerAdapter extends FragmentPagerAdapter { 


public MyPagerAdapter(FragmentManager fm) { 

    super(fm); 
} 

@Override 
public Fragment getItem(int pos) { 

    TextView cate_title = (TextView) getActivity().findViewById(R.id.cate_title); 
    String title_name = ""; 
    switch(pos) { 
     case 0: 
      title_name = "MACARONS"; 
      cate_title.setText(title_name); 
      return new SP_macarons(); 
     case 1: 
      title_name = "CHOCOLATE"; 
      cate_title.setText(title_name); 
      return new SP_chocolate(); 
     case 2: 
      title_name = "CHEESE MOUSSE"; 
      cate_title.setText(title_name); 
      return new SP_cheese_mousse(); 
     default: 
      break; 
    } 
return null; 
} 

@Override 
public int getCount() { 
    return 3; 
} 

et c'est le code Fragment

public class SpecialCake extends Fragment { 
private ViewPager viewPager; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
} 
@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 
    // Inflate the layout for this fragment 
    View view = inflater.inflate(R.layout.special_cake, container, false); 


    final ViewPager pager = (ViewPager)view.findViewById(R.id.cate_pager); 
    pager.setAdapter(new MyPagerAdapter(getChildFragmentManager())); 

    ImageButton prebtn = (ImageButton) view.findViewById(R.id.leftarrow); 
    prebtn.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View view) { 
      pager.setCurrentItem(getItem(-1), true); //getItem(-1) for previous 
     } 
     private int getItem(int i) { 
      return pager.getCurrentItem() + i; 
     } 
    }); 
    ImageButton nxtbtn = (ImageButton) view.findViewById(R.id.rightarrow); 
    nxtbtn.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View view) { 
      pager.setCurrentItem(getItem(+1), true); //getItem(-1) for previous 
     } 
     private int getItem(int i) { 
      return pager.getCurrentItem() + i; 
     } 
    }); 

    return view; 
} 

Répondre

0

Vous pouvez avoir OnPageChangeListener.

Définissez d'abord le titre sur MACARONS, puis changez le titre lorsque la page change.

textView.setTitle("MACRONS); 

Puis

pager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() { 
    @Override 
    public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { 

    } 

    @Override 
    public void onPageSelected(int position) { 
    String title_name = ""; 
    // depending on the position do something 
    if(position==0) 
    { 
     title_name = "MACARONS"; 
    } 
    else if(position==1) 
    { 
     title_name = "CHOCOLATE"; 
    } 
    else 
    { 
     title_name = "MACARONS"; 
    } 
    // Now set title to text 
    textView.setTitle(title_name); 
    } 
+0

c'est un travail pour moi! mais j'ai une question quand je clique pour la première fois dans la page, le titre de cate est vide. après avoir cliqué sur suivant et de revenir à la première page, le titre vient d'apparaître. – JsLaw

+0

définir le titre au départ lui-même. avant OnpageChangeListener. J'ai ajouté cela dans la réponse. – Raghunandan

+0

Merci de m'aider à résoudre le problème !! – JsLaw

0

Vous pouvez utiliser setUserVisibleHint dans votre viewpager fragment pour déterminer si elle est visible par l'utilisateur ou non.

Formulaire Documentation:

définir un indice au système de savoir si l'interface utilisateur de ce fragment est actuellement visible pour l'utilisateur. Cet indicateur est par défaut vrai et est persistant à travers l'état d'instance de fragment enregistrer et restaurer.

Ajoutez donc TextViewTextView cate_title = (TextView) getActivity().findViewById(R.id.cate_title); à la disposition de votre fragment.

Et ajoutez le code suivant:

public class SP_macarons extends Fragment { 

    @Override 
    public void setUserVisibleHint(boolean isVisibleToUser) { 
     super.setUserVisibleHint(isVisibleToUser); 
     if (isVisibleToUser) { 
      title_name = "MACARONS"; 
      cate_title.setText(title_name); //card_title should be defined in your fragment 
     } 
     else { 
     } 
    } 
}