Comment appeler getFragmentManager sur Recycleur.Adaptateur?
Je suis la conversion ListView de mon appli pour RecyclerView. Sur la Liste, il est très facile à mettre en œuvre OnClickListener mais dans RecyclerView, nous devons le faire dans l'adaptateur. Je veux ouvrir un nouveau Fragment lorsque l'utilisateur clique sur un élément. Pour ce faire, je dois appeler FragmentManager adaptateur dont je ne suis pas en mesure de le faire.
C'est mon code de RecyclerAdapter:
public ListItemViewHolder(View itemView) {
super(itemView);
title = (TextView) itemView.findViewById(R.id.title);
description = (TextView) itemView.findViewById(R.id.description);
itemView.setOnClickListener(this);
}
@Override
public void onClick(View v) {
//Call FragmentManager and add Fragment to it.
}
}
Alors, comment appeler FragmentManager et ajouter des Fragments en elle. Est-il mieux que cela comme sendingBroadcast ou toute autre méthode.
- la bulle de l'événement jusqu'à Recycler.Adaptateur (comme maintenant il est dans le support) et définir un écouteur pour elle (par exemple le fragment qui crée l'addapter) - comment faire? il a été décrit ici, sur tant de fois
- Je sais comment appeler FragmentManager de l'activité ou du fragment, mais il me donne l'erreur dans la Carte
Vous devez vous connecter pour publier un commentaire.
Vous avez juste besoin d'un contexte d'activité passés en votre constructeur. Assurez-vous d'appeler
new Adapter(this,...)
des activités et desnew Adapter(getActivity(),...)
à partir de fragments.À ajouter sur la approuvé réponse: si vous obtenez un message d'erreur que vous pourriez avoir besoin de remplacer la ligne;
Avec cette
Pour moi, c'était parce que j'étais à l'aide de la
support.v4.app.FragmentManager
au lieu de l'ordinairefragmentmanager
Obtiens toujours une erreur?
Comme l'un commentaire ci-dessous indiqué, cela pourrait jeter un
java.lang.ClassCastException:
et journal... cannot be cast to android.support.v7.app.AppCompatActivity
(vérifier les commentaires pour plus de détails)Leur solution était de l'utiliser (je n'ai pas testé mais il a travaillé pour eux):
Assurez-vous de passer contexte de la ArrayAdapter ou RecyclerViewAdpater,de Sorte que nous pouvons l'obtenir à l'intérieur de l'Adaptateur de Classe.
Si votre mainActivity est l'extension de l'Activité alors utiliser :
Si votre mainActivity est l'extension de AppCompatActivity alors utiliser :
Meilleure option serait probablement pour avoir le Fragment qui instancie le RecyclerAdapter à mettre en œuvre et de l'interface comme ceci:
Vous avez juste besoin d'un contexte d'activité passés en votre constructeur. Assurez-vous d'appeler de nouveaux
Adapter(this,...)
des activités et desnew Adapter(getActivity(),...)
à partir de fragments.private Context context;
@Override
public void onClick(View v) {
FragmentManager manager = ((Activity) context).getFragmentManager();}
Je sais que c'est trop tard pour vous, mais pour quelqu'un d'autre qui pourrait voir cela.
Donc au lieu de faire des m vai fait, vous pouvez passer le contexte du fragment lorsque vous initialisez votre carte.
Dans votre constructeur de votre carte, vous pouvez ajouter un argument comme ça
et dans votre fragment que vous pouvez initialiser si
enfin, vous pouvez appeler
de sorte que vous pouvez commencer un nouveau fragment
Instancier la fragmentManager dans l'activité elle-même.
MyActivity.java
CustomAdapter.java
MyClickListener.java
Vous pouvez passer FragmentManager de référence lors de la création viewholder de sorte que votre classe pour Viewholder pourrait être comme suit