Java 从自定义ListView中的复选框获取值
我已经实现了一个HashMap,其中键是字符串,值是整数。我想知道如何获取单击单选按钮的值,以获取值,然后是否可以对它们执行一些操作,例如: 已检查Cb1 2 已检查Cb2 9 Cb3 19未检查 输出应为11(2+9) 因此,我想对选中的进行求和,并用该值更新TextView 从现在起,我有: 这是HashMapJava 从自定义ListView中的复选框获取值,java,android,listview,checkbox,Java,Android,Listview,Checkbox,我已经实现了一个HashMap,其中键是字符串,值是整数。我想知道如何获取单击单选按钮的值,以获取值,然后是否可以对它们执行一些操作,例如: 已检查Cb1 2 已检查Cb2 9 Cb3 19未检查 输出应为11(2+9) 因此,我想对选中的进行求和,并用该值更新TextView 从现在起,我有: 这是HashMap HashMap<String, Integer> hmAs = new LinkedHashMap<String, Integer>(); 这是适配器 cl
HashMap<String, Integer> hmAs = new LinkedHashMap<String, Integer>();
这是适配器
class HashMapArrayAdapter extends ArrayAdapter {
Context mContext;
private static class ViewHolder {
TextView tV1;
CheckBox cb;
}
public HashMapArrayAdapter(Context context, int textViewResourceId, List<Map.Entry<String, Integer>> objects) {
super(context, textViewResourceId, objects);
this.mContext = context;
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
ViewHolder viewHolder;
if (convertView == null) {
convertView = LayoutInflater.from(getContext()).inflate(R.layout.custom_item_dialog, parent, false);
viewHolder = new ViewHolder();
viewHolder.tV1 = (TextView) convertView.findViewById(R.id.tvDataAs);
viewHolder.cb = (Checkbox) convertView.findViewById(R.id.checkbox);
convertView.setTag(viewHolder);
} else
viewHolder = (ViewHolder) convertView.getTag();
Map.Entry<String, Integer> entry = (Map.Entry<String, Integer>) this.getItem(position);
viewHolder.tV1.setText(entry.getKey());
viewHolder.rb.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
Toast.makeText(mContext, String.valueOf(entry.getValue()), Toast.LENGTH_SHORT).show();
}
});
return convertView;
}
}
类HashMapArrayAdapter扩展了ArrayAdapter{
语境;
私有静态类视图持有者{
文本视图tV1;
复选框cb;
}
公共HashMapArrayAdapter(上下文上下文、int textViewResourceId、列表对象){
超级(上下文、textViewResourceId、对象);
this.mContext=上下文;
}
@凌驾
公共视图getView(最终整数位置、视图转换视图、视图组父视图){
持票人持票人;
if(convertView==null){
convertView=LayoutInflater.from(getContext()).flate(R.layout.custom\u item\u对话框,父项,false);
viewHolder=新的viewHolder();
viewHolder.tV1=(TextView)convertView.findViewById(R.id.tvDataAs);
viewHolder.cb=(复选框)convertView.findViewById(R.id.Checkbox);
convertView.setTag(viewHolder);
}否则
viewHolder=(viewHolder)convertView.getTag();
Map.Entry=(Map.Entry)this.getItem(position);
viewHolder.tV1.setText(entry.getKey());
viewHolder.rb.setOnCheckedChangeListener(新建CompoundButton.OnCheckedChangeListener(){
@凌驾
检查更改后的公共无效(复合按钮视图,布尔值已检查){
Toast.makeText(mContext,String.valueOf(entry.getValue()),Toast.LENGTH_SHORT.show();
}
});
返回视图;
}
}
通过这个Toast
我得到了映射的确切值
,但问题是如何从对话框中,当我按下“接受”时,我有按钮
,我可以得到列表视图的所有复选框
的总和
编辑
我最后做了这样的事情:
我创建了一个名为sessiono
的类,它包含一个int
(sessiono的值)和一个boolean
来检查复选框是否被选中。嗯,我必须在SharedReferences
上保存选中的内容,我一直在这里阅读,因此您将建议不要在SharedReferences
上保存HashMap
,因为它需要大量内存。。因此,想法是一样的,我必须保存所有的hashmap,以及单击或不单击哪个hashmap,我认为要计算复选框的内容
按“接受”我可以得到所有复选框的总和
列表视图
在HashMapArrayAdapter
中创建一个方法,该方法返回选中的条目值,并在Accept
按钮上调用它单击:
1。声明一个HashMap,其中position作为键,entry.getValue()作为键,用于存储选中的复选框值:
Map<Integer, String> checkedCheckBoxValues = new HashMap<Integer, String>();
3.将选中的中的键和值添加到checkedChanged
到checkedCheckBoxValues
:
checkedCheckBoxValues.put(position,String.valueOf(entry.getValue()));
4.调用getCheckedCheckBoxs
方法,在接受
按钮上单击使用适配器
:
@Override
public void onClick(View v) {
mDialog.dismiss();
HashMap<Integer, String> checkedValues=adapter.getCheckedCheckBoxs();
}
@覆盖
公共void onClick(视图v){
mDialog.discouse();
HashMap checkedValues=adapter.getCheckedCheckBoxs();
}
我也在尝试做同样的事情,哈哈哈,我只是覆盖了getCount()
,然后通过参数传递值的总和(所有复选框都是选中的),然后在onCheckedChanged上输入if(checked)sum=sum+entry.value()否则sum=sum-entry.value(),但我会尝试你的问题。。。我会让你知道情况如何going@Stuart2041:ok try it from start我尝试在不重写的情况下执行此操作,但我这样做是因为当我在适配器内创建方法时,它不允许我从活动中调用它,它表示无法解析方法我希望将哈希映射保存到共享首选项,因为如果我更改了复选框不更新,所以创建返回相同HashMap的getter是一个好方法?
checkedCheckBoxValues.put(position,String.valueOf(entry.getValue()));
@Override
public void onClick(View v) {
mDialog.dismiss();
HashMap<Integer, String> checkedValues=adapter.getCheckedCheckBoxs();
}