我正在使用recyclerview显示可供选择的兴趣列表。单击第一个项目也会选择最后一个项目
选择第一项:
还选择了最后一项:
使用以下代码完成选择:
@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);
}
当点击最后一个项目时,也会选择第一个项目。 谁知道是什么原因造成的?
答案 0 :(得分:1)
您正在将布局扩展为TextView
。将其更改为View 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>);
将View
投放到TextView
并不是您想要做的。
答案 1 :(得分:0)
我有一个复选框来选择项目和以下字符串数组
数据:保存我所有的物品 checkedData:保存所有选中的项目
要解决此问题,请尝试编辑onBindViewHolder(holder,position)
@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]);
}
}
});
}
说明
它将是每次将数据绑定到onBindViewHolder中的持有者时的操作,您之前已取消选中该复选框,然后检查是否将对应的持有者字符串存在于checkedData数组中(如果是)将checkBox设置为true。 em>