gpt4 book ai didi

java - 如何避免RadioGroup在RecyclerView中检查两次

转载 作者:行者123 更新时间:2023-12-01 22:40:59 25 4
gpt4 key购买 nike

我注意到RecyclerView“回收”适配器中的 View ,但我想停止RecyclerView适配器在RecyclerView的另一个项目中复制检查的操作。

我在 RecyclerView 中绘制了 10 个项目,每个项目都有一个 RadioGroup,其中有 2 个 RadioButton,但是当我在第一个项目中触发检查时,例如,第 10 个项目也被选中。

我正在阅读这个问题,但我无法解决它。

Using Radio button with recyclerview in android

如何避免这种情况?

我的适配器:

...

public class PreguntaAdapter extends RecyclerView.Adapter<PreguntaAdapter.ViewHolder> {
private Context context;
private ArrayList<VistaEncuestaActivity.PreguntasSiNo> preguntas;
public ArrayList<Respuestas> respuestas = new ArrayList<Respuestas>();
public PreguntaAdapter(Context context, ArrayList<VistaEncuestaActivity.PreguntasSiNo> preguntas) {
this.context = context;
this.preguntas = preguntas;
}

public ArrayList<Respuestas> getCheckedItems() {
return respuestas;
}

@NonNull
@Override
public PreguntaAdapter.ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
Context context = viewGroup.getContext();
LayoutInflater layoutInflater = LayoutInflater.from(context);
View v = layoutInflater.inflate(R.layout.item_pregunta_sino, viewGroup, false);
ViewHolder viewHolder = new ViewHolder(v);

return viewHolder;
}


@Override
public void onBindViewHolder(@NonNull final PreguntaAdapter.ViewHolder viewHolder, int i) {
final VistaEncuestaActivity.PreguntasSiNo currentPregunta = preguntas.get(i);
//viewHolder.pregunta.setText(currentEncuesta.getString_pregunta());
viewHolder.pregunta.setText(currentPregunta.getQuestion());

viewHolder.myLinearLayout.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {

}
});

viewHolder.setIsRecyclable(false);

}

@Override
public int getItemCount() {
return preguntas.size();
}

public class ViewHolder extends RecyclerView.ViewHolder {
public SharedPreferences prefs;
private LinearLayout myLinearLayout;
public TextView pregunta;
public RadioGroup radio_group;
public ViewHolder(@NonNull View itemView) {
super(itemView);
pregunta = (TextView) itemView.findViewById(R.id.pregunta);
radio_group = (RadioGroup) itemView.findViewById(R.id.radio_group_pregunta);
prefs = (SharedPreferences) context.getSharedPreferences("logged", Context.MODE_PRIVATE);
myLinearLayout = (LinearLayout) itemView.findViewById(R.id.myLinearLayout);
}
}
}

最佳答案

感谢大家的回复。不幸的是,任何响应都帮助我解决了这个问题,我使用了这个函数,并将 getItemViewType 函数添加到我的适配器中,它现在运行良好:

@Override
public int getItemViewType(int position) {
return position;
}

访问官方谷歌文档我可以找到下一个信息:

Return the view type of the item at position for the purposes of view recycling. The default implementation of this method returns 0, making the assumption of a single view type for the adapter. Unlike ListView adapters, types need not be contiguous. Consider using id resources to uniquely identify item view types. https://developer.android.com/reference/android/support/v7/widget/RecyclerView.Adapter

这在RecyclerView“回收” View 时是有意义的,但是当在适配器中使用它时,它会产生不同的行为,将每个 View 视为唯一的。

谢谢大家。

关于java - 如何避免RadioGroup在RecyclerView中检查两次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58495996/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com