Comment puis-je mettre les titres en ViewPager à l'aide de fragments?
Je suis en utilisant ViewPager pour permettre à l'utilisateur de glisser entre les fragments.
Comment puis-je ajouter le titre de chaque fragment à l'écran?
package com.multi.andres;
import java.util.List;
import java.util.Vector;
import com.viewpagerindicator.TitlePageIndicator;
import com.viewpagerindicator.TitleProvider;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
import android.support.v4.view.ViewPager;
public class ViewPagerFragment extends FragmentActivity{
private PagerAdapter mPagerAdapter; //contiene el pager adapter
private static String[] titulosPaginas = { "APP 1", "APP 2" };
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
super.setContentView(R.layout.lcmeter); //layout que contiene el ViewPager
initialisePaging(); //inicializo las paginas
}
private void initialisePaging() {
List<Fragment> fragments = new Vector<Fragment>();
fragments.add(Fragment.instantiate(this, FragmentPrueba1.class.getName()));
fragments.add(Fragment.instantiate(this, FragmentPrueba2.class.getName()));
this.mPagerAdapter = new PagerAdapter(super.getSupportFragmentManager(), fragments);
ViewPager pager = (ViewPager)super.findViewById(R.id.pager);
pager.setAdapter(this.mPagerAdapter);
//Agrega los titulos
TitlePageIndicator titleIndicator = (TitlePageIndicator) findViewById(R.id.titulos); //layout XML
titleIndicator.setViewPager(pager);
}
/** *************************************************************************************************
/** Clase: public class PagerAdapter extends FragmentPagerAdapter implements TitleProvider
/** Notas: extends FragmentPagerAdapter permite el uso de las paginas de ViewPager pero con Fragments
/** implements TitleProvider permite el uso de los titulos en las paginas
/** Funcion: crea paginas por las cuales deslizarse horizontalmente las cuales son usadas
****************************************************************************************************/
public class PagerAdapter extends FragmentPagerAdapter implements TitleProvider {
private List<Fragment> fragments;
public String getTitle(int position) {
//TODO Auto-generated method stub
return titulosPaginas[position]; //titulo de la pagina
}
public PagerAdapter(FragmentManager fm, List<Fragment> fragments) {
super(fm);
this.fragments = fragments;
}
@Override
public int getCount() {
return this.fragments.size();
}
@Override
public Fragment getItem(int position) {
return this.fragments.get(position);
}
}
}
Mais il n'affiche pas les titres de ViewPager et je ne sais pas pourquoi. J'ai utilisé ViewPager avec des titres, mais pas avec les fragments, et je ne peux pas obtenir les titres d'aujourd'hui.
Dites-vous que chaque Onglet dispose de son propre titre?
OriginalL'auteur Andres Torti | 2012-04-06
Vous devez vous connecter pour publier un commentaire.
Vous pouvez également utiliser Jake de Wharton ViewPagerIndicator de la bibliothèque pour obtenir l'effet désiré. Davek804 la réponse de travaux de trop, mais il vous oblige à référencer l'ensemble de la ActionBarSherlock de la bibliothèque, ce qui n'est pas préférable si vous simplement besoin d'un
ViewPager
qui prend en charge personnalisée/style titres.Mise en place pour fonctionner correctement est tout simplement une question de l'écriture d'un petit peu de XML, de l'initialisation de votre
ViewPager
dans votreActivity
, et la mise en œuvre d'unFragmentAdapter
(quiextends FragmentPagerAdapter implements TitleProvider
) pour spécifier les pages quiFragment
s.XML de mise en page
Initialiser dans votre
Activity
Mettre en œuvre un
CustomFragmentAdapter
Edit:
La
ViewPagerIndicator
bibliothèque prend en charge la délivrance de titres de propriété caractéristiques:TitlePageIndicator
TabPageIndicator
CirclePageIndicator
ViewPager
. par exemple,pager.setOffscreenPageLimit(CustomFragmentAdapter.NUM_TITLES-1);
empêchera votreViewPager
de détruire hors de l'écranFragment
s (que vous pouvez ou ne peut pas décider qui est nécessaire dans votre application).Merci, mais comment je dois créer la méthode newInstance() à l'intérieur de chaque fragment ? Est entièrement nécessaire ? Si vous payez un coup d'oeil à mon programme, il semble pour instancier les classes et puis sans la création d'newInstance(). - Vous me dire d'utiliser TabPageIndicator en XML est-il le même que TitlePageIndicator ?
Oh désolé... j'ai copié et collé le code d'une application que j'ai écrit. Si votre
Fragment
ne prend aucun argument, alors vous pouvez simplement appeler le constructeur par défaut pour chaqueFragment
à la place.Voir mon edit au sujet de la
TabPageIndicator
confusion 🙂J'ai mis une réponse parce que l'un a dû mettre un peu de code s'il vous plaît payer un coup d'oeil 🙂
OriginalL'auteur Alex Lockwood
Ou si vous n'aimez pas utiliser à partir de la troisième partie de la bibliothèque, vous pouvez utiliser le support v4 PagerTabStrip classe.
Par exemple:
et dans PagerAdapter remplacer getPageTitle méthode:
Vous pouvez y accéder pour un élément xml à partir d'un code comme ceci:
J'espère qu'il vous aide à quelqu'un
C'est plus facile et commode de code seulement avec quelques lignes de code pour afficher les onglets en vue pager sans l'aide d'un tiers de la bibliothèque.
OriginalL'auteur Ivvan
Où mine dit SherlockFragmentActivity, vous pouvez juste avoir FragmentActivity. getSupportActionBar peut être getActionBar().
OriginalL'auteur Davek804
@Alex Lockwood Merci 🙂 j'ai encore un problème :/C'est mon XML:
lcmeter.xml
De pentecôte mon code d'origine dans le premier post, si une "TitlePageIndicator" avant "d'android.de soutien.v4.vue.ViewPager" je peux voir les titres, mais je ne peux pas swype seulement en cliquant sur les titres de modifier les pages et mon fragments ne sont pas montré mais avec le XML de cette façon, je peux swype par le biais de mes fragments, mais je ne peux pas voir les titres :/. J'ai essayé de pentecôte constructeurs sur ce chemin:
Mais j'ai une FC quand j'ouvre l'application. Voici mon fragment les deux sont égaux:
C'est des fragments XML:
J'ai lu sur les Fragments, mais je ne peux pas obtenir de travail des Fragments de pentecôte titres et il ne fait pas sens :/je suis nouveau à cela, mais je suis en apprentissage et il est assez compliqué pour moi, ce genre de choses je vous remercie beaucoup pour votre aide, j'ai vraiment l'apprécier 🙂
EDIT:
Je pense que j'ai fondé le problème, il n'est pas sur du code Java, le problème est sur le fichier XML ViewPager:
Qui semble en "remettre" les titres parce que si j'utilise du fichier XML d'exemple Google qui ajoute android:layout_weight="1" sur android.de soutien.v4.vue.ViewPager, je peux voir les titres sur le bas de l'écran, pas sur place, mais est un progrès 🙂
OriginalL'auteur Andres Torti