gpt4 book ai didi

java - 在 recyclerView 中滚动时如何保持复选框状态?

转载 作者:行者123 更新时间:2023-11-30 10:19:55 25 4
gpt4 key购买 nike

我看过 herehere但我无法调整这些解决方案来解决我的问题。你能帮忙吗?

我选中复选框,在我的 recyclerview 中向下滚动,当我向上滚动时,复选框未选中,或者选中了不同的复选框。

我明白为什么会这样 - 如前所述 here : 你应该在你的 onBindViewHolder 中添加一个 boolean variable 来保持你的项目的选择状态,我相信我正在这样做:

theContactsList.get(pos).setSelected(isChecked);

但仍未保留复选框状态。

这是我的代码:

  @Override
public void onBindViewHolder(final RecyclerView.ViewHolder viewHolder, final int position) {
//bind the views into the ViewHolder
//selectPhoneContact is an instance of the SelectPhoneContact class.
//We will assign each row of the recyclerview to contain details of selectPhoneContact:

//The number of rows will match the number of phone contacts
final SelectPhoneContact selectPhoneContact = theContactsList.get(position);

//if the row is a matching contact
if (viewHolder.getItemViewType() == 1)

{
//in the title textbox in the row, put the corresponding name etc...
((MatchingContact) viewHolder).title.setText(selectPhoneContact.getName());
((MatchingContact) viewHolder).phone.setText(selectPhoneContact.getPhone());
//((MatchingContact) viewHolder).check.setText("Cheeckbox" + position);
((MatchingContact) viewHolder).check.setChecked(theContactsList.get(position).isSelected);
((MatchingContact) viewHolder).check.setTag(position);

// ((MatchingContact) viewHolder).check.setChecked(selectPhoneContact.isSelected());



((MatchingContact) viewHolder).check.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
// ((MatchingContact) viewHolder).check.setOnClickListener(new CompoundButton.OnClickListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked){
//pos is the row number that the clicked checkbox exists in
Integer pos = (Integer) ((MatchingContact) viewHolder).check.getTag();

//set the value of the checkbox accordingly onCheckedChange,
//to true or false
theContactsList.get(pos).setSelected(isChecked);

if(isChecked == true ) {
// ((MatchingContact) viewHolder).check.setChecked(true);
Toast.makeText(context_type, theContactsList.get(pos).getPhone() + " clicked!", Toast.LENGTH_SHORT).show();

}

else {
// ((MatchingContact) viewHolder).check.setChecked(false);
Toast.makeText(context_type, theContactsList.get(pos).getPhone() + " unclicked!", Toast.LENGTH_SHORT).show();

}

}
});

}

}

最佳答案

有一个HashMap<String, Boolean>回收器适配器中的实例。键应该是唯一定义每个项目的东西,值表示项目是否被选中。每当您单击复选框时,请调用 map.put(item.getId(), !map.get(item.getId()) (不要忘记检查初始不存在的情况)。最后在onBindViewHolder()里面方法,始终根据 HashMap 中的状态设置项目的复选框.

关于java - 在 recyclerView 中滚动时如何保持复选框状态?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48371863/

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