J'utilise ViewPager
pour faire glisser entre les deux Fragments
, mais puis-je utiliser ViewPager
pour passer d' Views
une mise en page XML simple?
Voici ma page Adapter
pour le ViewPager qui est utilisé pour glisser entre les fragments:
import java.util.List;
import com.app.name.fragments.TipsFragment;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
import android.support.v4.app.FragmentTransaction;
import android.view.ViewGroup;
public class PageAdapter extends FragmentPagerAdapter {
/**
*
*/
List<Fragment> fragments;
public PageAdapter(FragmentManager fm,List<Fragment> frags) {
super(fm);
fragments = frags;
}
@Override
public Fragment getItem(int arg0) {
// TODO Auto-generated method stub
return TipsFragment.newInstance(0, 0);
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return 4;
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
FragmentManager manager = ((Fragment) object).getFragmentManager();
FragmentTransaction trans = manager.beginTransaction();
trans.remove((Fragment) object);
trans.commit();
super.destroyItem(container, position, object);
}
}
Et voici mon fragment de pointe:
public class TipsFragment extends Fragment
{
public static TipsFragment newInstance(int image,int content)
{
TipsFragment fragment = new TipsFragment();
return fragment;
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.tip_layout, null);
return view;
}
}
Comment puis-je modifier mon code pour qu'il fonctionne avec des vues au lieu de Fragment?
ViewPager
suronDestroy
ainsi sur l'onResume
activité il n'y aura pas besoin de récupérer tous les 3 fragments qui ne peuvent plus disponibles. Je voulais juste mentionner l'un des problèmes.Réponses:
Vous devez remplacer ces deux méthodes plutôt que
getItem()
:la source
ViewPager
tout car vous traitez avec l'ViewGroup
interfaceUtilisez cet exemple
Vous pouvez utiliser une seule mise en page XML imbriquant les vues enfants.
MAIS ... vous devez également gérer cela avec un adaptateur. Ici, nous renvoyons l'ID de vue trouvé sans gonfler aucune autre disposition.
// Définir l'adaptateur ViewPager
la source
return collection.findViewById(resId);
Si vous ne voulez pas passer une instance d'activité@Override public void destroyItem(ViewGroup container, int position, Object object) {}
Nous avons construit une sous-classe très simple du
ViewPager
que nous utilisons parfois.Cette classe n'a pas besoin d'un adaptateur car elle chargera les vues à partir de la mise en page. Afin de l'utiliser dans vos projets, utilisez-le simplement à la place du
android.support.v4.view.ViewPager
.Tous les trucs sophistiqués fonctionneront toujours, mais vous n'avez pas besoin de vous soucier des adaptateurs.
la source
onAttachedToWindow()
pouronFinishInflate()
.Sur la base des réponses précédentes, j'ai fait le cours suivant pour y parvenir de la manière la plus appropriée et la plus claire (j'espère):
Et vous devez le paramétrer dans votre activité:
Où les fichiers XML sont évidents view_screen.xml:
Et ActivtyMain a la disposition suivante:
Un grand merci à Brian et Nicholas pour votre réponse, j'espère ajouter quelques informations plus claires et mettre en évidence quelques bonnes pratiques pour cette fonctionnalité.
la source
Je voudrais développer la réponse @Nicholas, vous pouvez obtenir les vues par identifiant ou si elles sont ajoutées dynamiquement, obtenez simplement la vue en fonction de sa position
la source
Je voudrais ajouter ma solution ici. Étant donné que vous n'avez pas besoin de fragments d'utilisation, vous pouvez créer encore
PagerAdapter
qui se fixe auviews
lieu defragments
laViewPager
.Étendre
PagerAdapter
au lieu deFragmentPagerAdapter
Vous devez maintenant définir trois classes qui renverront le
views
à gonfler dans leviewpager
. Similaire àCpuView
vous aurezMemoryView
et desNetworkView
classes. Chacun d'eux gonflera ses dispositions respectives.Et enfin une mise en page qui sera gonflée dans chacune des vues
PS: La raison pour laquelle j'ai écrit cette réponse est que toutes les solutions fournies ici semblent fonctionner correctement, mais elles gonflent les dispositions de la classe PagerAdapter elle-même. Pour les grands projets, il devient difficile de maintenir si leur code est beaucoup plus gonflé. Maintenant, dans cet exemple, toutes les vues ont des classes et des dispositions distinctes. Ainsi, le projet peut être facilement maintenu.
la source
oui ... vous pouvez utiliser View au lieu de Fragment dans viewpager. Ici, vous pouvez trouver un exemple complet qui vous aidera à réaliser Viewpager sans fragment. Parcourez cette documentation.
https://www.bignerdranch.com/blog/viewpager-without-fragments/
la source