2016-07-29 13 views
1

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?

+0

holder.getAdapterPosition() Sie rufen an. Aber wo setzen Sie Position für Halter? –

+0

Ich bin mir nicht sicher. Wo sollte es eingestellt werden..können Sie bitte klären – Learner

+0

letzte CardView Karte = (CardView) itemView.findViewById (R.id.card_view); final MyViewHolder holder = neuer MyViewHolder (itemView); halter.setPosition (YOUR_POSITION); –

Antwort

3

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(); 
} 
1

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); 
     } 
+0

Was ist Ihre_Position? – Learner