如何处理CardView上的第二次点击

时间:2017-02-06 19:25:34

标签: android onclick onclicklistener android-cardview

好的,我只想尝试处理CardView上的第二次点击。

例如,现在当我(或用户)点击CardView时,它会生成CardViewTRANSPARENT以及Focusable和其他一些内容比如将Android文本添加到EditText

所以,我需要处理用户或我自己第二次点击CardView CardView更改为Color.WHITE并设置{{ 1}}到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时进行处理第一次点击东西等等......

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

1 个答案:

答案 0 :(得分:2)

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

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;
        }
    });