Pourquoi il n'est pas possible d'utiliser ViewPager à l'intérieur d'un Fragment? Il est en fait
Il y a des informations qu'il est impossible d'utiliser ViewPager
dans un Fragment
dans de nombreuses sources comme "Le Occupé des Codeurs de Guide pour les Développeurs Android" par Mark Murphy, ou à des postes comme cette sur DONC. Je suis confondu parce que je n'ai pas ce problème et j'ai réussi à utiliser ViewPager
dans mon Fragment
. La seule distinction est que j'instancie un ViewPager
pas dans onCreateView()
méthode, mais dans onActivityCreated()
. Et tout fonctionne parfaitement bien.
La question est donc - peut-être que je ne sais pas quelque chose, et ce n'est pas recommandé pour une raison de faire de l'INTERFACE utilisateur instanciations dans onActivityCreated()
? Mais encore une fois - tout fonctionne bien.
Voici la liste de la classe et xml:
Classe:
public class ViewPagerFragment extends Fragment {
static final int NUM_ITEMS = 2;
private ViewPagerAdapter mAdapter;
private ViewPager mPager;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
return inflater.inflate(R.layout.view_pager_fragment, container, false);
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
mAdapter = new ViewPagerAdapter(getFragmentManager());
mPager = (ViewPager) getView().findViewById(R.id.pager);
mPager.setAdapter(mAdapter);
}
public static class ViewPagerAdapter extends FragmentPagerAdapter {
public ViewPagerAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int num) {
if (num == 0) {
return new ItemsListFragment();
} else {
return new FavsListFragment();
}
}
@Override
public int getCount() {
return NUM_ITEMS;
}
}
}
Mise en page:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical">
<android.support.v4.view.ViewPager
android:id="@+id/pager"
android:layout_width="fill_parent"
android:layout_height="0dp"
android:layout_weight="1"/>
</LinearLayout>
- j'ai le même problème stackoverflow.com/questions/31476778/...
Vous devez vous connecter pour publier un commentaire.
Mise à JOUR: Depuis cette réponse a été écrit à l'origine, vous avez désormais imbriqués fragments, ce qui signifie qu'il est possible d'avoir un
ViewPager
utiliser des fragments de pages et être dans un fragment de lui-même. Cet exemple de projet montre la technique.Je vais maintenant vous retournez à votre régulière réponse, présenté dans son intégralité...
Me citer dans le livre:
Citant Dianne Hackborn:
Il est parfaitement possible de mettre un
ViewPager
à l'intérieur d'unFragment
, tant que le contenu de laViewPager
eux-mêmes ne contiennent des fragments. Depuis le des implémentations concrètes dePagerAdapter
fourni par le Soutien Android package utiliser des fragments, vous avez passer votre propre fragment moinsPagerAdapter
de mettre laViewPager
dans un fragment.Je m'efforcerai de faire de ce point plus clair dans la prochaine édition du livre (sauf si vous êtes Britannique, auquel cas je ferai mon possible pour faire de ce point plus clair :-).
onActivityCreated()
méthode?onActivityCreated()
. Parfois, c'est nécessaire, je ne peux pas sembler obtenir unMapView
de travailler avec un natif (non-backport) fragment sauf si j'attends jusqu'à ceonActivityCreated()
pour le créer. Cela étant dit, étant donné que des fragments en fragments est pas officiellement pris en charge, même sionActivityCreated()
semble pour vous aider à vous aujourd'hui, il ne peut pas vous aider dans une certaine future version du SDK Android ou Support package.ViewPager
est à l'aide d'un enfantFragmentManager
). Si vous êtes, alors, en théorie, il devrait y avoir aucun problème, mais imbriquées les fragments sont parfois problématique en général, j'ai donc essayer de les éviter dans la mesure du possible.cw-omnibus
pensions, et que je puisse prendre un coup d'oeil. Sinon, mon imbriqués les fragments de l'expérience est très limitée, et si j'ai pas le problème que vous décrivez. Notez, cependant, quegetId()
sur un fragment contenant le fragment est, autant que je me souvienne, pas un ID unique du fragment de lui-même.listview
de contenu. Mais la vue de la liste n'est pas visible dans tous les fragments plutôt que le premier. Avez-vous un exemple de code à votre github? Je ne trouve pas d'exemple similaire.Pour mettre en œuvre la Vue de radiomessagerie dans un fragment de l'utilisation getChildFragmentManager() au lieu de getFragmentManager(). Vous pouvez appeler setAdapter() pour la ViewPager de onCreateView() ou onActivityCreated(), qui n'est pas une question.
J'espère que cela va vous aider les gars.
getChildFragmentManager()
@Raj, vous économiser de ma journée, merci!Lors de l'Initialisation du SetionPageAdapter pour ViewPager utiliser "getChildFragmentManager()".
il est possible, essayez de faire ce code et enregistrer view_pager_fragment.xml
ViewPagerFragment