私は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() + "'";
}
}
}`
ボタンにボタンが含まれている場合、ビューの所有者はクリックイベントを受け取りません。ボタンはクリックイベントを受け取り、リサイクルビューの所有者は受け取りません。 –
ViewHolder自体はクリックイベントを受け取りません。ビューのみがそれを行うことができます。ビューホルダー内のボタンへの参照を保持し、クリックイベントを受け取って処理する必要があります。 WHOLEアイテムがクリックを受け取るようにするには、アイテムのルートビューをクリック可能にし、ボタンであるかのようにクリックリスナーにアタッチすることでハックすることができます。 – SadClown