![](/img/trans.png)
[英]How to get checkbox state in expandable listview in android
[英]How to get only updated checkbox status in listview android
我在对话框中有一个带复选框的列表视图。 现在,我只需要从对话框的“确定单击”中获取更新的复选框即可。 例如,如果用户仅选中该行中的一个复选框,则我仅需要获取该状态,但是如果用户选中并取消选中该复选框,则我不希望该状态。 我尝试使用哈希表在选中时获取和删除状态,但是在listview滚动时,将执行checkbox事件,并且哈希表填充了错误的值。
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;
}
}
谁能帮我
您不需要HashMap,带有status属性的简单项目持有者类将为您提供帮助。 查看修改后的代码:
编辑:如果我对您的理解正确,那么您想在其检查状态更改时获取SelectGroupItems
对象吗? 如果是这样,请参见下面的编辑代码:
public class SelectGroupAdaptor extends BaseAdapter {
Activity activity;
ArrayList<SelectGroupItemHolder> data = new ArrayList<SelectGroupItemHolder>();
OnItemCheckStatusChangedListener onItemCheckStatusChangedListener;
// a item holder class, not a view holder
private static class SelectGroupItemHolder {
SelectGroupItems selectGroupItems;
boolean status;
}
public interface OnItemCheckStatusChangedListener {
public void onItemCheckStatusChanged(SelectGroupItems selectGroupItems, boolean checkStatus, int position);
}
public void setOnItemCheckStatusChangedListener(OnItemCheckStatusChangedListener onItemCheckStatusChangedListener) {
this.onItemCheckStatusChangedListener = onItemCheckStatusChangedListener;
}
public SelectGroupAdaptor(Activity activity) {
this.activity = activity;
}
public void add(SelectGroupItems selectGroupItems) {
SelectGroupItemHolder selectGroupItemHolder = new SelectGroupItemHolder();
selectGroupItemHolder.selectGroupItems = selectGroupItems;
this.data.add(selectGroupItemHolder);
notifyDataSetChanged();
}
public ArrayList<SelectGroupItems> getCheckedData() {
ArrayList<SelectGroupItems> checkedItemList = new ArrayList<SelectGroupItems>();
for (SelectGroupItemHolder selectGroupItemHolder : data) {
if (selectGroupItemHolder.status) {
checkedItemList.add(selectGroupItemHolder.selectGroupItems);
}
}
return checkedItemList;
}
@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).selectGroupItems.getGroupName());
checkBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
data.get(position).status = isChecked;
if(onItemCheckStatusChangedListener != null) {
onItemCheckStatusChangedListener.onItemCheckStatusChanged(data.get(position).selectGroupItems, data.get(position).status, position);
}
}
});
checkBox.setChecked((data.get(position).status));
return convertView;
}
@Override
public int getCount() {
return data.size();
}
@Override
public Object getItem(int position) {
return null;
}
@Override
public long getItemId(int position) {
return 0;
}
}
设置selectGroupAdapter实例的检查状态更改侦听器。 即:
selectGroupAdaptor.setOnItemCheckStatusChangedListener(new SelectGroupAdaptor.OnItemCheckStatusChangedListener() {
@Override
public void onItemCheckStatusChanged(SelectGroupItems selectGroupItems, boolean checkStatus, int position) {
// handle check status change
}
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.