Ich verwende den folgenden Code, um onClickListener für cardview festzulegen.Die Kartenansicht ist immer -1
OnClickListener funktioniert perfekt, aber warum ist die Position immer -1 zurückgibt?
Ich verwende den folgenden Code, um onClickListener für cardview festzulegen.Die Kartenansicht ist immer -1
OnClickListener funktioniert perfekt, aber warum ist die Position immer -1 zurückgibt?
Ich sehe das Problem darin, dass Sie einen neuen Ansichtshalter in Ihrem 'Oncreateviewholde' zurückgeben, anstatt auf den, den Sie bereits erstellt haben.
@Override
public MyViewHolder onCreateViewHolder(final ViewGroup parent, int viewType) {
View itemView = LayoutInflater.from(parent.getContext())
.inflate(R.layout.album_card, parent, false);
final CardView card = (CardView)itemView.findViewById(R.id.card_view);
final MyViewHolder holder = new MyViewHolder(itemView);
//
// your code
card.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
final int position = holder.getAdapterPosition();
}
});
return new MyViewHolder(itemView); // problem, remove it
return holder; // use this
}
andere Sache ist es eine gute Praxis ist, wenn Sie die Zuhörer gesetzt und initialisieren Ansichten in Ihrem Halter Konstruktor wie dieses
public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
public TextView title;
public ImageView image;
public ViewHolder(View itemView) {
super(itemView);
title = (TextView) itemView.findViewById(R.id.title);
image = (ImageView) itemView.findViewById(R.id.thumbnail);
image.setOnClickListener(this);
}
@Override
public void onClick(View view) {
Log.d("pos",""+getAdapterPosition());
removeAt(getAdapterPosition());
}
}
public void removeAt(int position) {
list.remove(position);
notifyDataSetChanged();
}
Benutzer Tag-Konzept Position zu bekommen.
@Override
public MyViewHolder onCreateViewHolder(final ViewGroup parent, int viewType) {
View itemView = LayoutInflater.from(parent.getContext())
.inflate(R.layout.album_card, parent, false);
final CardView card = (CardView)itemView.findViewById(R.id.card_view);
final MyViewHolder holder = new MyViewHolder(itemView);
holder.setTag(YOUR_POSTION);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
StateListAnimator stateListAnimator = AnimatorInflater
.loadStateListAnimator(mContext, R.anim.lift_on_touch);
card.setStateListAnimator(stateListAnimator);
}
card.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
final int position = (int)holder.getTag();
Log.d("Position",""+position);
if (position == 2) {
Intent intent = new Intent(mContext, ExperienceActivity.class);
mContext.startActivity(intent);
}
}
});
return new MyViewHolder(itemView);
}
Was ist Ihre_Position? – Learner
holder.getAdapterPosition() Sie rufen an. Aber wo setzen Sie Position für Halter? –
Ich bin mir nicht sicher. Wo sollte es eingestellt werden..können Sie bitte klären – Learner
letzte CardView Karte = (CardView) itemView.findViewById (R.id.card_view); final MyViewHolder holder = neuer MyViewHolder (itemView); halter.setPosition (YOUR_POSITION); –