2016-11-10 24 views
-1

私はrecyclerViewを持っていて、そのアイテムにボタンが含まれています。ボタンをクリックすると、私はrecyclerview項目の位置を取得したいと思います。ボタンがクリックされたときにクリックされたイベントがトリガーされているが、neathの下にあるrecyclerviewアイテムがそうでない場合、クリックされたイベントは、上部のボタンを介してrecyclerviewアイテムに行くことができないという問題があります。 このクリックイベントを取得するにはどうすればよいですか、どうすればそれらをバインドできますか?答えを知っていれば誰か教えてください。RecyclerViewアイテムとそれを含むボタンクリックイベントをバインドする方法

更新: オンラインで類似の投稿は見つかりませんでした。通常、recyclerviewにはボタンが含まれており、異なるOnclickedListenerに登録されています。私の場合、彼らは同じリスナーを処理する必要があります。特に、recyclerviewはそれを処理します。しかしボタンは、単にrecyclerviewのクリックされたイベントをブロックします。ここでviewholderコード: `パブリッククラスGridViewAdapterはRecyclerView.Adapter {

private final LinkedList<Device> mValues; 
    private final OnListFragmentInteractionListener mListener; 
    private OnLongClickListener mOnLongClickListener = null; 

    public GridViewAdapter(LinkedList<Device> items, OnListFragmentInteractionListener listener) { 
     mValues = items; 
     mListener = listener; 
    } 

    @Override 
    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
     View view = LayoutInflater.from(parent.getContext()) 
       .inflate(R.layout.device, parent, false); 
     return new ViewHolder(view); 
    } 

    @Override 
    public void onBindViewHolder(final ViewHolder holder, int position) { 
     holder.mItem = mValues.get(position); 
//  holder.mIconView.setImageResource(R.drawable.ic_switch); 

     holder.mNameView.setText(holder.mItem.device_name()); 

     holder.mView.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       if (null != mListener) { 
        mListener.onDeviceClicked(holder.mItem); 
       } 
      } 
     }); 
    } 

    public void deleteByDeviceCode(int deviceCode) { 
     for(int i=0;i<mValues.size();i++) { 
      if (mValues.get(i).device_code() == deviceCode) { 
       mValues.remove(i); 
      } 
     } 
    } 

    public void deleteByPosition(int pos) { 
     mValues.remove(pos); 
    } 

    public int getDeviceCodeByPosition(int pos) { 
     return mValues.get(pos).device_code(); 
    } 

    @Override 
    public int getItemCount() { 
     return mValues.size(); 
    } 

    public class ViewHolder extends RecyclerView.ViewHolder { 
     public final View mView; 
     public final Button mButton; 
     public final TextView mNameView; 
     public Device mItem; 

     public ViewHolder(View view) { 
      super(view); 
      mView = view; 
      mButton = (Button) view.findViewById(R.id.dev_button); 
      mNameView = (TextView) view.findViewById(R.id.dev_lable); 
     } 

     @Override 
     public String toString() { 
      return super.toString() + " '" + mNameView.getText() + "'"; 
     } 

    } 
}` 

答えて

0

ビューホルダを作成する場合、それらにそれらで表される要素のインデックス、または全要素をも参照を渡す試みるを拡張します。今度は、ビューホルダーでclickイベントを受け取ったとき、イベント自体で、そのホルダー/行によって表される(index of)要素を渡す必要があります。

+0

ボタンにボタンが含まれている場合、ビューの所有者はクリックイベントを受け取りません。ボタンはクリックイベントを受け取り、リサイクルビューの所有者は受け取りません。 –

+0

ViewHolder自体はクリックイベントを受け取りません。ビューのみがそれを行うことができます。ビューホルダー内のボタンへの参照を保持し、クリックイベントを受け取って処理する必要があります。 WHOLEアイテムがクリックを受け取るようにするには、アイテムのルートビューをクリック可能にし、ボタンであるかのようにクリックリスナーにアタッチすることでハックすることができます。 – SadClown

関連する問題