2016-07-29 7 views
1

다음 코드를 사용하여 cardview에 onClickListener를 설정합니다.Cardview 위치는 항상 -1입니다.

@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); 

     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 = holder.getAdapterPosition(); 
      Log.d("Position",""+position); 
       if (position == 2) { 
        Intent intent = new Intent(mContext, ExperienceActivity.class); 
        mContext.startActivity(intent); 
       } 
      } 
     }); 

     return new MyViewHolder(itemView); 
    } 

OnClickListener는 완벽하게 작동하지만 위치가 항상 -1을 반환하는 이유는 무엇입니까?

+0

holder.getAdapterPosition() 그러나 당신이 홀더에 대한 입장을 설정하는 곳은 어디입니까? –

+0

확실하지 않습니다. 어디에서 설정해야합니까? – Learner

+0

최종 CardView 카드 = (CardView) itemView.findViewById (R.id.card_view); 최종 MyViewHolder 홀더 = 새 MyViewHolder (itemView); holder.setPosition (YOUR_POSITION); –

답변

3

내가보기에 당신이 이미 만든 사진 대신에 'Oncreateviewholde'에 새로운 뷰 홀더를 반환하는 것입니다.

@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 
     } 

다른 것은 당신의 위치를 ​​얻기 위해이

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

사용자 태그 개념처럼 홀더 생성자 내부 의견을 청취자를 설정하고 초기화 할 경우 좋은 습관이다입니다.

@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

your_position은 무엇입니까? – Learner

관련 문제