如何处理 CardView 的第二次点击

How to handle the Second Click on a CardView

好的,我只是想处理对 CardView 的第二次点击。

例如,现在当我(或用户)点击 CardView,它将使 CardViewTRANSPARENT 以及 Focusable 和一些其他东西,比如将 Android 文本添加到 EditText.

所以,我需要处理用户或我自己第二次点击 CardView CardView 变为 Color.WHITE 并将 Focusable 设置为 false 或其他内容...

我该怎么做?

这是我目前所做的:

 final CardView cvAnd = (CardView) findViewById(R.id.and_cv);
        cvAnd.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

                cvAnd.setTag("FirstClick");
                if (cvAnd.getTag().equals("FirstClick") && TextUtils.isEmpty(mTagField.getText().toString())) {
                    mTagField.setText(R.string.android);
                } else {
                    mTagField.setText(mTagField.getText() + "Android");
                }
                cvAnd.setCardBackgroundColor(Color.TRANSPARENT);
                cvAnd.setFocusable(true);

                //First click

                cvAnd.setTag("SecondClick");
                if (cvAnd.getTag().equals("SecondClick")) {
                    cvAnd.setCardBackgroundColor(Color.WHITE);
                    cvAnd.setFocusable(false);

                }

                //Second click maybe?
            }
        });

想法是设置标签(在第一次点击)到FirstClick然后处理它如果标签FirstClick 是在做第一次点击等等...

但是,问题是,我真的不知道如何处理 第二次点击

这是您提出的概念证明。如果您不明白,请告诉我。

public class CardViewAdapter extends extends RecyclerView.Adapter<CardViewAdapter.MyViewHolder> {

    public class MyViewHolder extends RecyclerView.ViewHolder {
        public boolean isFirstSelected;
        public CardView cardView;

        public MyViewHolder(View view) {
            super(view);
            cardView = (CardView) view.findViewById(R.id.card);
        }

        public void reset(){
            //put here all the properties which need to be resetted
            isFirstSelected = false;
        }
    }


    @Override
    public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View itemView = LayoutInflater.from(parent.getContext())
                .inflate(R.layout.card_row, parent, false);

        return new MyViewHolder(itemView);
    }

    @Override
    public void onBindViewHolder(final MyViewHolder holder, int position) {
        //set card click listener here and use
        //holder.isFirstSelected to handle the internal logic
    }

    @Override
    public void onViewRecycled(MyViewHolder holder) {
        //reset the viewholder state
        holder.reset();
    }

}

我已获取您的代码段并尝试将其中的逻辑转化为该代码段。可能您需要更改逻辑,但现在您有了一个起点。

final CardView cvAnd = (CardView) findViewById(R.id.and_cv);
    cvAnd.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View view) {
            if (!isClicked) {
                if (TextUtils.isEmpty(mTagField.getText().toString())) {
                    mTagField.setText(R.string.android);
                    cvAnd.setCardBackgroundColor(Color.TRANSPARENT);
                    cvAnd.setFocusable(true);
                }

            } else {
                if (mTagField.getText().toString().contains("Android")) {
                    mTagField.getText().clear();
                } else {
                    mTagField.setText(mTagField.getText() + ", Android");
                }
                cvAnd.setCardBackgroundColor(Color.WHITE);
                cvAnd.setFocusable(false);
            }
            //reverse boolean
            isClicked = !isClicked;
        }
    });