【发布时间】:2015-08-27 06:08:34
【问题描述】:
我在对话框中有一个带有复选框的列表视图。现在我只需要从对话框的“确定单击”中获取更新的复选框项目。例如,如果用户只选中行中的一个复选框,我只需要获得该状态,但如果用户选中并取消选中该复选框,我不想要该状态。我尝试在选中时使用哈希表来获取和删除状态,但是在列表视图滚动时,复选框事件被执行并且哈希表填充了错误的值。
public class SelectGroupAdaptor extends BaseAdapter {
Activity activity;
ArrayList<SelectGroupItems> data = new ArrayList<>();
Hashtable<Integer,Boolean> status;
public SelectGroupAdaptor(Activity activity) {
this.activity = activity;
}
public void add(SelectGroupItems selectGroupItems) {
this.data.add(selectGroupItems);
notifyDataSetChanged();
status=new Hashtable<>();
}
public ArrayList<SelectGroupItems> getCheckedData () {
return data;
}
@Override
public int getCount() {
return data.size();
}
@Override
public Object getItem(int position) {
return null;
}
@Override
public long getItemId(int position) {
return 0;
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
TextView textView;
CheckBox checkBox;
if (convertView == null) {
convertView = LayoutInflater.from(activity).inflate(R.layout.layout_select_group_row, null);
}
textView = (TextView) convertView.findViewById(R.id.label);
textView.setTypeface(Util.setCustomFont(activity));
checkBox = (CheckBox) convertView.findViewById(R.id.checkbox);
textView.setText(data.get(position).getGroupName());
checkBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView,
boolean isChecked) {
data.get(position).setChecked(isChecked);
if(status!=null)
{
if(status.get(position)!=null)
{
status.remove(position);
}else
{
status.put(position,isChecked);
}
}
}
});
checkBox.setChecked((data.get(position).isChecked()));
return convertView;
}
public Hashtable<Integer,Boolean> getStatus()
{
return status;
}
}
谁能帮帮我
【问题讨论】:
-
那么位置值是多少?而且您已经有一个存储项目检查状态的数据列表,我认为状态哈希表并不是真正需要的。如果需要知道检查的是什么,可以循环数据列表来查找。
-
请使用标点符号改进您的问题。你的问题很难读。
-
我已经更新了我的代码
-
您的代码中存在一些问题。您没有使用持有人。所以它会在滚动 listView 时发生变化。
-
当我调用 getStatus() 哈希表时,我需要这样的输出,其中包含项目的位置和复选框的布尔状态,仅修改过