0

ReyclerView リストに CardViews があります。CardView の LongClick が DialogFragment を起動するように設定しました。CardView にはチェックボックスがあり、LongClick メソッドからチェックボックスを除外したい。つまり、チェックボックスが LongClicked の場合、DialogFragment をロードしたくありません。CardView レイアウトに 'android:longClickable="false"' と 'android:focusable="false"' を追加しましたが、うまくいきませんでした。どうすれば達成できますか?

Adapter file:    
...
public static class ListViewHolder extends RecyclerView.ViewHolder implements View.OnLongClickListener {

    CardView singleCardView;

    TextView cardBlankText1;
    TextView cardBlankTextNumstotal;
    CheckBox chkSelected;
    TextView cardBlankText2;
    TextView cardBlankText4;
    TextView cardBlankText5A;
    TextView cardBlankText5B;
    TextView cardBlankText6;
    TextView cardBlankText7;
    TextView cardBlankText8;

    public ListViewHolder(View itemView) {
        super(itemView);

        itemView.setOnLongClickListener(this);
        singleCardView = (CardView) itemView.findViewById(R.id.singlecard_view1);

        chkSelected = (CheckBox) itemView.findViewById(R.id.chkSelected);
        cardBlankText1 = (TextView) itemView.findViewById(R.id.cardBlankText1);
        cardBlankTextNumstotal = (TextView) itemView.findViewById(R.id.cardBlankTextNumstotal);
        cardBlankText2 = (TextView) itemView.findViewById(R.id.cardBlankText2);
        cardBlankText4 = (TextView) itemView.findViewById(R.id.cardBlankText4);
        cardBlankText5A = (TextView) itemView.findViewById(R.id.cardBlankText5A);
        cardBlankText5B = (TextView) itemView.findViewById(R.id.cardBlankText5B);
        cardBlankText6 = (TextView) itemView.findViewById(R.id.cardBlankText6);
        cardBlankText7 = (TextView) itemView.findViewById(R.id.cardBlankText7);
        cardBlankText8 = (TextView) itemView.findViewById(R.id.cardBlankText8);

        chkSelected.setOnLongClickListener(new View.OnLongClickListener() {
            @Override
            public boolean onLongClick (View view){
                return true;
            }
        });
    } 
    @Override
    public boolean onLongClick(View view) {
        clickListener.onItemLongClick(getAdapterPosition(), view);
        return false;
    }
}

public void setonItemClickListener(ClickListener  clickListener) {
    ListAdapter.clickListener = clickListener;
}

public interface ClickListener {
    void onItemLongClick(int position, View view);
}
4

1 に答える 1

1

チェックボックスを取得し、空の OnLongClickListener を設定します。これにより、イベントが消費され、親 CardView がイベントを取得できなくなります。

View checkbox = container.findViewById(R.id.checkbox);

checkbox.setOnLongClickListener(new View.OnLongClickListener() {
    @Override
    public boolean onLongClick(View view) {
      //make sure to return true here so the parent cardview doesn't get the event.
      return true;
    }
});
于 2016-07-03T04:54:20.283 に答える