java - RecyclerView 第一项总是被选中
问题描述
我尝试了所有站点的所有解决方案,但无法解决此问题。如我试图添加onClickListener
到 RecyclerView 的代码所示,但始终检查第一项。我也尝试将默认设置checkedPosition
为-1
,但列表的第一项是不可选择的。除第一个项目外,所有其他项目都正常工作。
public class JsonListAdapter extends RecyclerView.Adapter <RecyclerView.ViewHolder> {
private static final int TYPE = -1;
private final List <Object> listRecyclerItem;
private int checkedPosition = 0;
public JsonListAdapter(Context context, List <Object> listRecyclerItem) {
this.context = context;
this.listRecyclerItem = listRecyclerItem;
}
public static class ItemViewHolder extends RecyclerView.ViewHolder {
public ItemViewHolder(@NonNull View itemView) {
super(itemView);
//findViewById here
}
}
@NonNull@Override
public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
switch (i) {
case TYPE:
default:
//LayoutInflater here
}
}
@Override
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder viewHolder, int i) {
int viewType = getItemViewType(i);
switch (viewType) {
case TYPE:
default:
//add data to list here
}
row_linear.setOnClickListener(view - >{
checkedPosition = i;
notifyDataSetChanged();
});
radioButton.setOnClickListener(view - >{
checkedPosition = i;
notifyDataSetChanged();
});
if (checkedPosition == i) {
radioButton.setChecked(true);
} else {
radioButton.setChecked(false);
}
}
}
解决方案
当您获得列表时,使用额外的Boolean启动列表项,并创建 getter 和 setter:
private boolean isChecked = false;
public boolean getIsChecked() {
return isChecked;
}
public void setIsChecked(boolean checked) {
isChecked = checked;
}
然后在您的适配器中修改您的条件以检查两者:
if (listRecyclerItem.get(i).getIsChecked() && checkedPosition == i)
接下来,您需要在选中另一个项目后立即取消选中一个项目(假设您将其设为单选):
radioButton.setOnClickListener(view- > {
listRecyclerItem.get(i).setIsChecked(false); // to uncheck previous item
checkedPosition=i;
listRecyclerItem.get(i).setIsChecked(true); // to check current item
notifyDataSetChanged();
});
if (listRecyclerItem.get(i).isChecked&&checkedPosition==i) {
radioButton.setChecked(true);
} else {
radioButton.setChecked(false);
}
推荐阅读
- python - 基于条件的分组和子集行
- java - camera2api 中是否有限制视频录制的设置?
- android - 如何从recyclerview到fragment
- c# - C# 关于 SpreadsheetLight 使用的几个问题
- json - Alexa Skill:播放音频导致“抱歉不知道”
- html - MJML 是否适用于 Oulook.com 和 Outlook 2016?
- javascript - jQuery验证在引导模式下不起作用
- java - 屏幕坐标干扰屏幕底部的栏
- windows - 在 Windows 10 上使用 jmeter GUI 使 .jmx 文件默认打开(双击文件)
- php - .htaccess 使用锚标记附加 URL Slugs