2017-01-29 7 views
1

目標は、グリッドビュー内のアイテムをクリックすると、選択したアイテムの詳細を示す別のアクティビティが開きます。しかし、新しいアクティビティ(.putExtraを介して)に渡される値は、どの項目をタップしても、常にarraylistの最後の項目です。これはアダプタクラスbtwの内部にあります。ありがとう:)アダプタ内のonBindViewHolderの位置は、常に最後のアイテムを返します

をコードは、あなたが原因onBindViewHolder方法でOnClickListener()セットで、このような奇妙な動作を取得

@Override 
    public void onBindViewHolder(final listHolder newsHolder, final int position) { 

     currentNews = newsList.get(position); 
     listHolder.ivArt.setImageResource(currentNews.getArt()); 
     newsHolder.ivArt.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       Intent intent = new Intent(viewGroup.getContext(), ViewNewsActivity.class); 
       intent.putExtra("list, (Parcelable) list); 
       viewGroup.getContext().startActivity(intent); 

      } 
     }); 
    } 
+0

の内側にこれを追加するには、 'ViewHolder'は'実装OnClickListener'とfinalとしてonClick'方法 – pskink

+0

なぜあなたが渡しているパラメータ '内の「位置」getterメソッドのいずれかを使用します?! – Fakher

答えて

0

下に見ることができます。 setOnClickListener()を追加してonCreateViewHolder()の内部を表示し、アダプタ内にnew View.OnClickListener()を作成します。

public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
     View view = inflater.inflate(R.layout.your_layout, parent, false); 
     view.setOnClickListener(onClickListener); 
     ... 
    } 

private View.OnClickListener onClickListener = new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      int viewPosition = recyclerView.getChildLayoutPosition(v); 
      ... 
     } 
    }; 
0

ドントあなたが任意の項目を削除したり、アイテムを追加する場合ViewHolderはまだ古いポジションの参照を持つことになりますので、ごonBindViewHolder上の位置の最終を作る代わりに使用することを検討してください:holder.getAdapterPosition()

0
  1. 最終的にポジションを宣言しないでください。
  2. currentNews = newsList.get(position); 作るのonClickメソッド
関連する問題