如何处理 CardView 的第二次点击
How to handle the Second Click on a CardView
好的,我只是想处理对 CardView
的第二次点击。
例如,现在当我(或用户)点击 CardView
,它将使 CardView
、TRANSPARENT
以及 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;
}
});
好的,我只是想处理对 CardView
的第二次点击。
例如,现在当我(或用户)点击 CardView
,它将使 CardView
、TRANSPARENT
以及 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;
}
});