gpt4 book ai didi

java - ArrayAdapter 正在更改 CheckBox 的值

转载 作者:行者123 更新时间:2023-12-02 03:35:26 26 4
gpt4 key购买 nike

我不知道发生了什么,我有一个对象列表,并且根据其状态来检查或不检查( CheckBox )。我尝试了太多方法,因为首先我想返回一个 ArrayList<myObject>状态已更新,但我不知道为什么对象会重复......我最终创建了一个 TreeSet (不知道这是否是更好的方法,但至少现在的对象不会重复)......好吧,事情是在我的 Adapter 上我有这个:

final Sessio sessio = getItem(position);
ALAdapter.add(sessio);
vh.tvSessioName.setText(sessio.getName());
vh.cbAssist.setChecked(sessio.isState());
vh.cbAssist.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
Toast.makeText(mContext, "chaning", Toast.LENGTH_SHORT).show();
sessio.setState(isChecked);
}
});

AlAdapter 是 private TreeSet<Sessio> ALAdapter;

这工作正常,问题是在我重新打开对话框时,因为我保存了 TreeSetjson上与 Gson如下:

Gson gson = new Gson();
String json = mPrefs.getString("ArrayListSesio", "");
Type type = new TypeToken <TreeSet<Sessio>> () {}.getType();
ArrayList<Sessio> obj = gson.fromJson(json,type);
return obj == null ? AlSessio : obj;

这也工作正常...我认为问题出在Adapter上因为如果我取消了一些CheckBox我更改了 Sessio 的状态当我重新打开Dialog时它显示Toast大概 15 次...每次我向上/向下滚动 CheckBox 的状态变化....

我做错了什么?有没有其他方法可以将其保存到 TreeSet将其保存到ArrayList

最佳答案

这里的问题是 View 被重用,所以在使用 setChecked 方法之前你应该这样做:

vh.cbAssist.setOnCheckedChangeListener(null);
vh.cbAssist.setChecked(sessio.isState());
vh.cbAssist.setOnCheckedChangeListener(/* your listener here */);

否则使用setChecked将触发监听器。

关于java - ArrayAdapter 正在更改 CheckBox 的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37501245/

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