Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/372.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从自定义ListView中的复选框获取值_Java_Android_Listview_Checkbox - Fatal编程技术网

Java 从自定义ListView中的复选框获取值

Java 从自定义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,其中键是字符串,值是整数。我想知道如何获取单击单选按钮的值,以获取值,然后是否可以对它们执行一些操作,例如:

已检查Cb1 2

已检查Cb2 9

Cb3 19未检查

输出应为11(2+9)

因此,我想对选中的进行求和,并用该值更新TextView

从现在起,我有:

这是HashMap

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();
    }