Comment obtenir la position de cardView élément dans recyclerView?
J'ai créé une classe d'adaptateur pour recycler pour le remplissage de cardview mise en recyclerview. Il fonctionne très bien, mais lorsque je clique sur cardView élément dans recyclerview j'ai besoin d'obtenir la position de ce cardview élément , en fonction que je dois écrire une Intention d'activité. Ainsi que comment faire pour supprimer cardview élément lorsque je balayez vers la gauche vers la droite.
MyAdapter
classe.
public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> {
private NavigationItem[] navigationItem;
private Context mContext;
public MyAdapter(NavigationItem[] navigationItem) {
this.navigationItem = navigationItem;
}
@Override
public MyAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View itemLayoutView = LayoutInflater.from(parent.getContext())
.inflate(R.layout.navigation_row_cardview, null);
ViewHolder viewHolder = new ViewHolder(itemLayoutView);
return viewHolder;
}
@Override
public void onBindViewHolder(MyAdapter.ViewHolder holder, int position) {
holder.txtViewTitle.setText(navigationItem[position].getTitle());
}
@Override
public int getItemCount() {
return navigationItem.length;
}
public class ViewHolder extends RecyclerView.ViewHolder {
@InjectView(R.id.hambergerRecyclerView)
public RelativeLayout recyclerView;
public TextView txtViewTitle;
public ViewHolder(final View itemLayoutView) {
super(itemLayoutView);
ButterKnife.inject(this, itemLayoutView);
txtViewTitle = (TextView) itemLayoutView.findViewById(R.id.navigationItemOptionName);
itemLayoutView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//int itemPosition = RecyclerView.getChildPosition(view);
int itemPosition = recyclerView.getChildAdapterPosition(view);
String item = navigationItem.get(itemPosition);
Toast.makeText(mContext, item, Toast.LENGTH_LONG).show();
}
});
}
}
}
OriginalL'auteur | 2015-09-09
Vous devez vous connecter pour publier un commentaire.
Réponse Courte
De la position de CardView élément
utilisation setTag() dans le onBindViewHolder méthode de votre carte et getTag() dans votre OnClickListener mise en œuvre.
vous pouvez également utiliser getAdapterPosition() - voir https://stackoverflow.com/a/27886776/4658957
EDIT: comme mentionné dans les commentaires si vous avez besoin de mettre en œuvre le passage des doigts, utilisez le getAdapterPosition() la méthode la place - cela permet de s'assurer que les positions ne sont pas hors de.
Le lancement d'une activité
créer et démarrer une Intention dans votre OnClickListener mise en œuvre
Réponse Longue
Comment obtenir la position d'un CardView élément dans la RecyclerView liste?
J'ai utilisé le setTag() et getTag() méthodes de Vue.
Vous pouvez également utiliser getAdapterPosition - voir https://stackoverflow.com/a/27886776/4658957
La Vue peut être un TextView, ImageView, CardView, même d'un point de Vue (qui peut contenir du texte, des vues, des vues d'images, et ainsi de suite) - essentiellement ok si il hérite de l'Objet d'Affichage.
tout d'abord, regardez le onCreateViewHolder méthode ci-dessous.
layoutInflater
gonfle le point de vue de mon XML fichier de mise en pageitem_view.xml
. Tout point de vue à ce fichier de mise en page sera accessible dans le constructeur.définir une constante pour votre point de Vue de l'objet comme mView et le régler à la Vue que vous souhaitez définir les onClickListener pour /obtenir la position de.
Dans le cas précédent, j'ai mis mView à la Vue parent.
Si vous souhaitez accéder à un point de Vue spécifique de l'item_view.xml fichier de mise en page gonflé dans onCreateViewHolder -- définir une autre constante, définir à l'aide de la vue.findViewbyId() et ne pas oublier de jeter la Vue (voir ci-dessous).
utilisation setTag() dans le onBindViewHolder méthode de votre carte de classe. Chaque CardView a maintenant sa position dans le RecyclerView liste comme une balise.
utilisation getTag() pour accéder à la position de chaque CardView dans votre RecyclerView liste: nous avons 2 voies (en Activité ou en XML).
ensemble onClickListener dans votre ViewHolder constructeur (ne pas oublier de mettre en œuvre la Vue.OnClickListener) et de modifier la méthode onClick
OU définir l'attribut onClick dans votre XML de mise en page pour CardView
android:onClick="positionAction"
et de créer une méthode dans l'activité qui contient le recycleur vue.
Pour les deux options ci-dessus, vous pouvez utiliser
String position = "Position " + view.getTag.toString();
au lieu deint position = (int) view.getTag;
si vous souhaitez obtenir la position de la Chaîne.Note 1: Vous pouvez uniquement utiliser getTag() sur l'Affichage des objets dont setTag() la méthode a été appelée (ou d'autre, vous obtiendrez un NullPointerException).
Note 2: je n'ai pas utiliser une clé pour setTag() et getTag() les méthodes, ce qui vous aurait pu le faire si vous êtes l'établissement de plusieurs balises pour chaque Vue.
Comment faire pour démarrer une activité fondée sur les CardView cliqué?
Pour démarrer une nouvelle activité basée sur la CardView élément de l'utilisateur clique sur ajouter les deux lignes ci-dessous dans le onClick de la méthode ou dans le positionAction méthode (basé sur celui que vous avez choisi d'utiliser).
Si vous souhaitez passer un objet d'une activité à l'autre, utilisez
et de la nouvelle activité (YourNewActivity classe) :
où itemList est une liste de tableaux de l'Article() des objets.
Références: StackOverflow | Tuts+
vous avez raison, j'ai édité ma réponse. merci!
OriginalL'auteur bastien
Mettre en œuvre
onClick
dansonBindViewHolder
, alors vous obtenez la position.OriginalL'auteur Tan Tran
Mise à jour de votre viewholder comme ce
navigationItem.get(getAdapterPosition()); modifier quelque chose comme ceci
toujours pas à obtenir un poste ?
OriginalL'auteur rKrishna
Vous pouvez essayer de passer de la position à
ViewHolder
deonBindViewHolder
OriginalL'auteur random
Essayez ceci sur votre
onBindViewHolder
adaptateuret d'obtenir sur votre
OnClickListener
:OriginalL'auteur Tazeem Siddiqui