Android RecyclerView duplicate ViewHolders单选按钮
我有一个问题的适配器,当我选择一个时,它们可能的答案会复制到适配器的其他部分,并出现在其他问题中,就好像我已经选择了它一样 试着从主通道通过,但没用 setHassTableId(true)和getItemId():getIdPojoAndroid RecyclerView duplicate ViewHolders单选按钮,android,android-recyclerview,Android,Android Recyclerview,我有一个问题的适配器,当我选择一个时,它们可能的答案会复制到适配器的其他部分,并出现在其他问题中,就好像我已经选择了它一样 试着从主通道通过,但没用 setHassTableId(true)和getItemId():getIdPojo public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCr
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
RecyclerView rv = findViewById(R.id.rv_Preguntas);
Adapter adapter = new Adapter(getLst());
adapter.setHasStableIds(true);
rv.setLayoutManager(new LinearLayoutManager(this));
rv.addItemDecoration(new DividerItemDecoration(this, LinearLayoutManager.VERTICAL));
rv.setAdapter(adapter);
}
public List<Pojo> getLst(){
List<Pojo>lst = new ArrayList<>();
for(int i =1;i<35;i++){
lst.add(new Pojo(i,"Pregunta "+i+"?",0));
}
return lst;
}}
public类MainActivity扩展了AppCompatActivity{
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
RecyclerView rv=findViewById(R.id.rv_Preguntas);
适配器=新适配器(getLst());
adapter.setHassTableId(true);
rv.setLayoutManager(新直线布局经理(本));
rv.附加装饰(新的分区装饰(此为直线布局管理器垂直);
rv.设置适配器(适配器);
}
公共列表getLst(){
Listlst=newarraylist();
对于(inti=1;i我通过改变
setOnCheckedChangeListener
到
setOnClickListener
setOnCheckedChangeListener事件即使在离开视野时也会被调用
public class Adpater_VH extends RecyclerView.ViewHolder {
TextView tv;
RadioGroup rg;
RadioButton rbSi, rbNO, rbNA;
public Adpater_VH(View itemView) {
super(itemView);
tv = itemView.findViewById(R.id.tv_rv);
rg = itemView.findViewById(R.id.rg_rv);
rbSi = itemView.findViewById(R.id.rbItemSi_rv);
rbNO = itemView.findViewById(R.id.rbItemNO_rv);
rbNA = itemView.findViewById(R.id.rbItemNA_rv);
}
void bind(final Pojo pojo) {
tv.setText(pojo.getPregunta());
rg.clearCheck();
Log.i("TAG-", pojo.getIdRegistro()+"bind: " + pojo.getIntRespuesta());
switch (pojo.getIntRespuesta()) {
case 1:
rbSi.setChecked(true);
break;
case 2:
rbNO.setChecked(true);
break;
case 3:
rbNA.setChecked(true);
break;
default:
rg.clearCheck();
break;
}
rbSi.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(rbSi.isChecked()){
pojo.setIntRespuesta(1);
}
}
});
}
}
public class Adpater_VH extends RecyclerView.ViewHolder {
TextView tv;
RadioGroup rg;
RadioButton rbSi, rbNO, rbNA;
public Adpater_VH(View itemView) {
super(itemView);
tv = itemView.findViewById(R.id.tv_rv);
rg = itemView.findViewById(R.id.rg_rv);
rbSi = itemView.findViewById(R.id.rbItemSi_rv);
rbNO = itemView.findViewById(R.id.rbItemNO_rv);
rbNA = itemView.findViewById(R.id.rbItemNA_rv);
}
void bind(final Pojo pojo) {
tv.setText(pojo.getPregunta());
rg.clearCheck();
Log.i("TAG-", pojo.getIdRegistro()+"bind: " + pojo.getIntRespuesta());
switch (pojo.getIntRespuesta()) {
case 1:
rbSi.setChecked(true);
break;
case 2:
rbNO.setChecked(true);
break;
case 3:
rbNA.setChecked(true);
break;
default:
rg.clearCheck();
break;
}
rbSi.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(rbSi.isChecked()){
pojo.setIntRespuesta(1);
}
}
});
}
}