我有一个recyclerview,可以在cardviews上加载复选框。这是适配器。它加载时很好。但是当我故意检查recyclerview上的某个项目时,会随机选中一个复选框。我该如何摆脱这个问题?这是我的适配器。提前谢谢。
<?php
$arrMessage = str_split(stripcslashes("adriano asdasd"));
$arrTemp = array();
$line = 0;
$word = array();
$arrTemp[$line] = array();
foreach($arrMessage as $char) {
if($char == " ") {
//calculate numbers of chars currently on line + number of chars in word
$numTotalChars = count($word) + count($arrTemp[$line]);
//if total > 20 chars on a line, create new line
if($numTotalChars > 20) {
$line++;
$arrTemp[$line] = array();
}
$word[] = $char;
//push word-array onto line + empty word array
$arrTemp[$line] = array_merge($arrTemp[$line], $word);
$word = array();
} else {
//if word is too long for a line, split it
if( count($word) > 20) {
$numTotalChars = count($word) + count($arrTemp[$line]);
if($numTotalChars > 20) {
$line++;
$arrTemp[$line] = array();
}
$arrTemp[$line] = array_merge($arrTemp[$line], $word);
$word = array();
}
$word[] = $char;
}
}
// Add last word if there's something left over
if (count($word)) {
$numTotalChars = count($word) + count($arrTemp[$line]);
if ($numTotalChars > 20) {
$line++;
$arrTemp[$line] = array();
}
//push word-array onto line + empty word array
$arrTemp[$line] = array_merge($arrTemp[$line], $word);
}
var_dump($arrTemp);
}
答案 0 :(得分:2)
你的onBindViewHolder()方法有问题...... RecyclerView将在滚动期间重用ViewHolders。因此,您应该为ViewHolder中的所有视图设置状态,以查看一致的数据。现在,您只为&#34; txtQuestionText&#34;设置文本。在这种情况下,您将看到列表项的一致文本和RadioButtons的随机状态。
简而言之,你应该有这样的事情:
@Override
public void onBindViewHolder(QuestionsViewHolder holder, final int position) {
holder.setModel(Questions.get(position));
}
...
public class QuestionsViewHolder ...
...
public void setModel(QuestionModel model){
rbLike.setChecked(model.like);
rbdisLike.setChecked(model.dislike);
rbnoComment.setChecked(model.comment);
txtQuestionText.setText(model.text);
}
答案 1 :(得分:1)
就我而言,我有以下代码:
if (checkpoint.getIsAttendance() == 1) {
holder.checkBoxAttendance.setChecked(true);
}
及其发生时,复选框会随机选中。
我更改了如下代码后
if (checkpoint.getIsAttendance() == 1) {
holder.checkBoxAttendance.setChecked(true);
} else {
holder.checkBoxAttendance.setChecked(false);
}
随机选中的复选框消失了。
答案 2 :(得分:0)
if (itemChecked[position])
holder.ck1.setChecked(true);
else
holder.ck1.setChecked(false);
holder.ck1.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
if (holder.ck1.isChecked())
itemChecked[position] = true;
else
itemChecked[position] = false;
}
});
return convertView;
........
@Override
public void onItemClick(AdapterView<?> arg0, View v, int position, long arg3) {
// TODO Auto-generated method stub
CheckBox cb = (CheckBox) v.findViewById(R.id.checkBox1);
TextView tv = (TextView) v.findViewById(R.id.textView1);
pi = (PackageInfo) arg0.getItemAtPosition(position);
cb.performClick();
if (cb.isChecked()) {
checkedValue.add(tv.getText().toString());
} else if (!cb.isChecked()) {
checkedValue.remove(tv.getText().toString());
}
}
答案 3 :(得分:-1)
只需在您的override
中添加以下adapter class
方法:
我遇到了同样的问题,对我有用:
@Override
public int getItemViewType(int position) {
return position;
}