Lorsque je démarre une activité qui implémente viewpager, le viewpager a créé divers fragments. Je veux utiliser différentes mises en page pour chaque fragment, mais le problème est que le viewpager ne montre que deux mises en page au maximum (deuxième mise en page sur tous les fragments restants après 1).
Voici le code pour SwipeActivity qui implémente le viewpager:
public class SwipeActivity extends FragmentActivity
{
MyPageAdapter pageAdapter;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_swipe);
pageAdapter = new MyPageAdapter(getSupportFragmentManager());
ViewPager pager=(ViewPager)findViewById(R.id.pager);
pager.setAdapter(pageAdapter);
ActionBar bar = getActionBar();
bar.setDisplayHomeAsUpEnabled(true);
}
/**
* Custom Page adapter
*/
private class MyPageAdapter extends FragmentPagerAdapter
{
public MyPageAdapter(FragmentManager fm)
{
super(fm);
}
@Override
public int getCount()
{
return 5;
}
@Override
public Fragment getItem(int position)
{
switch(position)
{
case 0: return new MyFragment();
case 1: return SecondFragment.newInstance("asdasd");
default : return RamFragment.newInstance("s");
}
}
}
}
Voici le code des fragments
public class MyFragment extends Fragment
{
@Override
public View onCreateView(LayoutInflater paramLayoutInflater, ViewGroup paramViewGroup, Bundle paramBundle)
{
return paramLayoutInflater.inflate(R.layout.processorlayout, paramViewGroup, false);
}
}
J'ai utilisé 5 fragments comme celui-ci, tous ayant des mises en page différentes, mais le visualiseur n'en montre que 2 au maximum.
EDIT : code pour SecondFragment
public class SecondFragment extends Fragment
{
public static final String EXTRA_MESSAGE = "EXTRA_MESSAGE";
public static final SecondFragment newInstance(String paramString)
{
SecondFragment f = new SecondFragment();
Bundle localBundle = new Bundle(1);
localBundle.putString("EXTRA_MESSAGE", paramString);
f.setArguments(localBundle);
return f;
}
@Override
public View onCreateView(LayoutInflater paramLayoutInflater, ViewGroup paramViewGroup, Bundle paramBundle)
{
return paramLayoutInflater.inflate(R.layout.motherboardlayout, paramViewGroup, false);
}
}
Réponses:
Comme il s'agit d'une question très fréquemment posée, je voulais prendre le temps et l'effort d'expliquer en détail le ViewPager avec plusieurs fragments et mises en page. Voici.
ViewPager avec plusieurs fragments et fichiers de mise en page - Comment faire
Dans ce cas, j'ai 3 classes Fragment et un fichier de mise en page différent pour chaque classe. Afin de garder les choses simples, les mises en page de fragments ne diffèrent que par leur couleur d'arrière-plan . Bien sûr, n'importe quel fichier de mise en page peut être utilisé pour les fragments.
FirstFragment.java a une disposition d'arrière-plan orange , SecondFragment.java a une disposition d'arrière-plan vert et ThirdFragment.java a une disposition d'arrière-plan rouge . De plus, chaque Fragment affiche un texte différent, en fonction de la classe dont il provient et de l'instance dont il s'agit.
MainActivity.java (Initialise le Viewpager et a l'adaptateur pour lui comme classe interne). Encore une fois, regardez les importations . J'utilise le
android.support.v4
package.activity_main.xml (Le fichier .xml MainActivitys) - un simple fichier de mise en page, contenant uniquement le ViewPager qui remplit tout l'écran.
Les classes Fragment, FirstFragment.java import android.support.v4.app.Fragment;
first_frag.xml
SecondFragment.java
second_frag.xml
ThirdFragment.java
third_frag.xml
Le résultat final est le suivant:
Le Viewpager contient 5 fragments, les fragments 1 sont de type FirstFragment et affichent la mise en page first_frag.xml, le fragment 2 est de type SecondFragment et affiche le second_frag.xml et les fragments 3 à 5 sont de type ThirdFragment et affichent tous le third_frag.xml .
Ci-dessus, vous pouvez voir les 5 fragments entre lesquels peuvent être commutés via un balayage vers la gauche ou la droite. Un seul Fragment peut être affiché à la fois bien sûr.
Enfin et surtout:
Au lieu de transmettre des paramètres potentiels via le constructeur, utilisez la
newInstance(...)
méthode et leBundle
pour transmettre les paramètres.De cette façon, s'il est détaché et rattaché, l'état de l'objet peut être stocké via les arguments. Tout comme
Bundles
attaché àIntents
.la source
Créez un tableau de vues et appliquez-le à:
container.addView(viewarr[position]);
la source
Code pour ajouter un fragment
Créez un fichier xml pour chaque fragment, par exemple pour Fragment1, utilisez fragment_one.xml comme fichier de mise en page, utilisez le code ci-dessous dans le fichier java Fragment1.
Plus tard, vous pourrez apporter les corrections nécessaires. Cela a fonctionné pour moi.
la source
Exemple de base de ViewPager
Cette réponse est une simplification de la documentation , de ce tutoriel et de la réponse acceptée . Son but est de mettre en
ViewPager
place un fonctionnement le plus rapidement possible. D'autres modifications peuvent être apportées par la suite.XML
Ajoutez les mises en page xml pour l'activité principale et pour chaque page (fragment). Dans notre cas, nous n'utilisons qu'une seule mise en page de fragment, mais si vous avez différentes mises en page sur les différentes pages, créez-en une pour chacune d'elles.
activity_main.xml
fragment_one.xml
Code
C'est le code de l'activité principale. Il inclut les classes
PagerAdapter
et enFragmentOne
tant que classes internes. Si ceux-ci deviennent trop volumineux ou que vous les réutilisez à d'autres endroits, vous pouvez les déplacer vers leurs propres classes distinctes.Fini
Si vous avez copié et collé les trois fichiers ci-dessus dans votre projet, vous devriez pouvoir exécuter l'application et voir le résultat dans l'animation ci-dessus.
Continuer
Il y a pas mal de choses que vous pouvez faire avec ViewPagers. Consultez les liens suivants pour commencer:
la source
C'est aussi bien:
la source
la source