2016-07-29 1 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

final CardView card =(CardView)itemView.findViewById(R.id.card_view); final 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

あなたの場所は何ですか? – Learner

関連する問題