Android 仅单击一项时,将更改RecyclerView第一项和最后一项
我正在使用recyclerview显示一个兴趣列表,可以从中选择。单击第一个项目会使最后一个项目也处于选中状态 选择第一项: 最后一项也被选中: 使用以下代码完成选择:Android 仅单击一项时,将更改RecyclerView第一项和最后一项,android,android-recyclerview,Android,Android Recyclerview,我正在使用recyclerview显示一个兴趣列表,可以从中选择。单击第一个项目会使最后一个项目也处于选中状态 选择第一项: 最后一项也被选中: 使用以下代码完成选择: @Override public InterestViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { TextView v = (TextView) LayoutInflater.from(parent.getContext())
@Override
public InterestViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
TextView v = (TextView) LayoutInflater.from(parent.getContext())
.inflate(R.layout.interests_textview, parent, false);
v.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
TextView textView = (TextView) v;
if (textView.getCompoundDrawables()[2] == null) {
textView.setCompoundDrawablesWithIntrinsicBounds(0, 0, R.drawable.checkmark, 0);
} else {
textView.setCompoundDrawablesWithIntrinsicBounds(0, 0, 0, 0);
}
}
});
return new InterestViewHolder(v);
}
单击最后一个项目时,也会选择第一个项目。
谁知道是什么原因导致了这种情况?您正在将版面膨胀为
TextView
。将其更改为查看v,它应该可以工作:
View v = LayoutInflater.from(parent.getContext())
.inflate(R.layout.interests_textview, parent, false);
您还需要使用findViewByID()
从布局中获得正确的TextView
:
而不是
TextView textView = (TextView) v;
这样做:
TextView textView = findViewById(<id of your textview in the layout>);
TextView TextView=findViewById();
将
视图
强制转换为文本视图
不是您想要做的。我有一个复选框来选择项目和以下字符串数组
数据:保存我的所有项目
checkedData:保存所有选中的项目
要解决此问题,请尝试编辑onBindViewHolder(holder,position)
解释
它将做的是每次数据绑定到onBindViewHolder中的holder时,您之前取消选中该复选框,然后检查该holder的对应字符串是否存在于checkedData数组中(如果是),如果将复选框设置为true。您能与Adapter共享您的项目xml吗找到解决方案了吗?我也在为同一个问题而挣扎……恐怕我得说,你的建议没有一个是有用的。但我确实解决了这个问题,只需在对象中保存单击状态,然后在onBindViewHolder中检查状态(已选择/未选择)。此问题的根本原因是RecyclerView回收了视图,因此在下一个回收项目上添加了复选标记。您的铸件肯定不是100%正确,但如果您找到了解决方案,您可以为我们自己的问题写一个答案,然后接受它。这将帮助下一个用户解决类似的问题。然后我会删除我的答案,这样在那之前你的评论不会丢失。
@Override
public void onBindViewHolder(@NonNull ProgrammminViewHolder holder, int position)
{
String title =data[position];
holder.textTitle.setText(title);
//logic to solve first and last (multiple) selection issue
CheckBox chk = holder.chk;
String current = data[position];
chk.setChecked(false);
for(String st : checkedData){
if(st.equals(current)){
chk.setChecked(true);
}
}
holder.setItemClickListener(new ItemClickListener()
{
@Override
public void onItemClick(View v, int pos)
{
//here analomay occured 19:36 Custom Reycler view CheckBoxes | anomaly is now cleared.
CheckBox chk = (CheckBox) v;//.findViewById(R.id.chk);
if(chk.isChecked())
{
checkedData.add(data[pos]);
}else if(!chk.isChecked())
{
checkedData.remove(data[pos]);
}
}
});
}