我有一个CardView
个自定义选择器,其中包含焦点状态为true
<android.support.v7.widget.CardView
android:id="@+id/cvColor"
android:layout_width="45dp"
android:layout_height="45dp"
android:layout_gravity="center"
android:layout_marginBottom="4dp"
android:layout_marginLeft="5dp"
android:layout_marginTop="2dp"
android:foreground="@drawable/card_color_size"
android:minHeight="50dp"
android:visibility="gone"
app:cardCornerRadius="3dp"
app:cardElevation="4dp"
app:cardPreventCornerOverlap="false"
app:cardUseCompatPadding="true" >
我需要的是,当我点击卡片时,它应该被点击以及聚焦。所以我做了类似的事。
@Override
public void onBindViewHolder(final ViewHolderCard1 viewHolder,
final int position) {
viewHolder.size.setVisibility(View.VISIBLE);
viewHolder.tvSize.setText(size.get(position).get("size"));
viewHolder.size.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
posSize = position;
Toast.makeText(getApplicationContext(), "" + posSize,
Toast.LENGTH_SHORT).show();
viewHolder.size.setFocusableInTouchMode(true);
}
});
}
现在,当我点击RecycleView
的项目时,它可以正常工作,Toast
和焦点同时发生。
但是当我点击下一个项目时,它就像在第一次点击卡片上执行点击事件一样,然后在第二次点击它就会得到焦点。
任何人都知道我该怎么办?
答案 0 :(得分:0)
Try this code.
@Override
public void onBindViewHolder(final ViewHolderCard1 viewHolder,
int position) {
viewHolder.size.setVisibility(View.VISIBLE);
viewHolder.tvSize.setText(size.get(position).get("size"));
viewHolder.size.setOnClickListener(new Listener(position, viewHolder.size));
}
class Listener implements OnClickListener {
private int position;
private ImageView imageView;
private CardView cardview;
Listener(int position, CardView cardview) {
this.position = position;
this.imageView = imageView;
this.data = data;
}
@SuppressLint("UseValueOf")
@Override
public void onClick(View v) {
posSize = position;
Toast.makeText(getApplicationContext(), "" + posSize,
Toast.LENGTH_SHORT).show();
CardView.setFocusableInTouchMode(true);
}
}
答案 1 :(得分:0)
我解决了这几天我是否在这里张贴我的答案,如果任何一个人解决了这个问题。
SparseBooleanArray
在我的案例中完成了这个伎俩。
首先在适配器类中声明SparseBooleanArray
。并在适配器类的构造函数中初始化它。
private ArrayList<HashMap<String, String>> size;
public final SparseBooleanArray selectedItems;
public Size(ArrayList<HashMap<String, String>> title) {
this.size = title;
selectedItems = new SparseBooleanArray(size.size());
}
现在我使用setSelected
来聚焦选定的卡片。在onBindViewHolder
内部(或getView
,以防您使用BaseAdapter
)。
viewHolder.size.setSelected(selectedItems.get(position));
viewHolder.size.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
posSize = position;
if (selectedItems.size() == 0) {
selectedItems.put(position, true);
} else if (selectedItems.size() > 0) {
selectedItems.clear();
selectedItems.put(position, true);
}
notifyDataSetChanged();
}
});
快乐编码。