标签:android android-recyclerview android-radiogroup
我有一个recyclerview,其中每个列表项都有一个带4个单选按钮的radiogroup.如何正确存储每个放射组的状态.
这是我的代码.在向上/向下滚动时,状态是不相关的.谢谢
public class ElementListAdapter extends RecyclerView.Adapter<ElementListAdapter.ViewHolder> {
private List<Element> elements = new ArrayList<>();
private Context context;
private int[] state;
public ElementListAdapter(Context context, List<Element> elements) {
this.context = context;
this.elements = elements;
this.state = new int[elements.size()];
Arrays.fill(this.state, -1);
}
@Override
public ElementListAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.list_item_layout, parent,
false);
return new ViewHolder(v);
}
@Override
public void onBindViewHolder(final ViewHolder holder, final int position) {
final Element ele = elements.get(position);
final String title = ele.getTitle();
final String description = ele.getDescription();
// Set text
holder.tvTitle.setText(title);
holder.tvDesciption.setText(description);
if (ele.isHeader()) {
holder.radioGroup.setVisibility(View.GONE);
} else {
holder.radioGroup.setVisibility(View.VISIBLE);
}
setRadio(holder, this.state[position]);
holder.rb1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
state[position] = 0;
setRadio(holder, state[position]);
}
});
holder.rb2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
state[position] = 1;
setRadio(holder, state[position]);
}
});
holder.rb3.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
state[position] = 2;
setRadio(holder, state[position]);
}
});
holder.rb4.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
state[position] = 3;
setRadio(holder, state[position]);
}
});
}
private void setRadio(final ViewHolder holder, int selection) {
System.out.println("SELECT:" + selection);
RadioButton b1 = holder.rb1;
RadioButton b2 = holder.rb2;
RadioButton b3 = holder.rb3;
RadioButton b4 = holder.rb4;
b1.setChecked(false);
b2.setChecked(false);
b3.setChecked(false);
b4.setChecked(false);
if (selection == 0) b1.setChecked(true);
if (selection == 1) b2.setChecked(true);
if (selection == 2) b3.setChecked(true);
if (selection == 3) b4.setChecked(true);
}
@Override
public int getItemCount() {
return elements.size();
}
public static class ViewHolder extends RecyclerView.ViewHolder {
public View view;
public TextView tvTitle;
public TextView tvDesciption;
public RadioGroup radioGroup;
public RadioButton rb1, rb2, rb3, rb4;
public ViewHolder(View itemView) {
super(itemView);
view = itemView;
tvTitle = (TextView) itemView.findViewById(R.id.title);
tvDesciption = (TextView) itemView.findViewById(R.id.description);
radioGroup = (RadioGroup) itemView.findViewById(R.id.radioGroup);
rb1 = (RadioButton) itemView.findViewById(R.id.rb1);
rb2 = (RadioButton) itemView.findViewById(R.id.rb2);
rb3 = (RadioButton) itemView.findViewById(R.id.rb3);
rb4 = (RadioButton) itemView.findViewById(R.id.rb4);
}
}
}
解决方法:
保存项状态的最佳方法是将状态变量放在列表的项模型中,例如:在您的情况下为“元素”,而不是在onBindViewHolder内部根据您的模型设置状态,在您的情况下:
改变这个:setRadio(holder,this.state [position]);
对此:setRadio(holder,elements.get(position).getState());
和
在onClick方法中
例如:第一个
改变这个:
state [position] = 0;
setRadio(holder,this.state [position]);
对此:
elements.get(位置).setState(0);
setRadio(holder,elements.get(position).getState());
标签:android,android-recyclerview,android-radiogroup 来源: https://codeday.me/bug/20190724/1526549.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。