【问题标题】:Get value from CheckBox in custom ListView从自定义 ListView 中的 CheckBox 获取值
【发布时间】:2016-09-24 15:57:24
【问题描述】:

好吧,我实现了一个 HashMap,其中键是字符串,值是整数,我想知道如何获取单击的单选按钮的值,然后获取值,然后如果我可以对它们进行一些操作,例如:

Cb1 2 已检查

Cb2 9 已检查

Cb3 19 未选中

输出应该是 11 (2+9)

所以我想对选中的值求和并使用该值更新 TextView。

从现在开始我有这个:

这是哈希映射

HashMap<String, Integer> hmAs = new LinkedHashMap<String, Integer>();

这就是我创建对话框的方式

Dialog mDialog;
mDialog=new Dialog(this);
mDialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
mDialog.setContentView(R.layout.custom_dialog_as);
ListView lv = (ListView) mDialog.findViewById(R.id.listView);
Button bt = (Button) mDialog.findViewById(R.id.btAcceptAs);
    bt.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            mDialog.dismiss();
                       //Here I need the sum of all of the values
        }
    });
ArrayAdapter adapter = new HashMapArrayAdapter(this, android.R.layout.simple_list_item_single_choice, new ArrayList(hmAs.entrySet()));
lv.setAdapter(adapter);
mDialog.show();

这是适配器

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

有了这个Toast,我得到了map的确切值,但问题是如何从对话框中得到Button,当我按下“接受”时,我可以获得所有@的总和ListView的987654327@

编辑

好吧,我最终做了这样的事情:

我创建了一个名为Sessio 的类,其中包含一个int(sessio 的值)和一个boolean,以检查复选框是否被选中。好吧,我必须将检查保存在SharedPreferences 上,并且我一直在阅读这里,您会建议不要在SharedPreferences 上保存HashMap,因为它需要大量内存,嗯.. 所以想法是一样的,我必须保存所有的hashmap以及哪个被点击或没有被点击,我认为这些东西要算CheckBox ...

【问题讨论】:

    标签: java android listview checkbox


    【解决方案1】:

    按“Accept”可以得到所有CheckBox的总和 列表视图

    HashMapArrayAdapter 中创建一个方法,该方法返回检查的条目值并在Accept 上调用它 按钮单击:

    1.声明一个HashMap,以position为key,entry.getValue()为key,用于存储选中的CheckBox值:

    Map<Integer, String> checkedCheckBoxValues = new HashMap<Integer, String>();
    

    2. 现在在HashMapArrayAdapter 类中创建一个返回HashMap&lt;Integer, String&gt; 的方法:

    public HashMap<Integer, String> getCheckedCheckBoxs(){
      return checkedCheckBoxValues;
    }
    

    3.onCheckedChanged 中的键和值添加到checkedCheckBoxValues

    checkedCheckBoxValues.put(position,String.valueOf(entry.getValue()));
    

    4.Accept上调用getCheckedCheckBoxs方法使用adapter点击按钮:

      @Override
        public void onClick(View v) {
           mDialog.dismiss();
           HashMap<Integer, String> checkedValues=adapter.getCheckedCheckBoxs();
        }
    

    【讨论】:

    • 我正在尝试做同样的事情哈哈哈我刚刚覆盖了getCount(),并通过参数传递了值总和的总和(所有复选框都被选中),然后在 onCheckedChanged 我把 if(checked) sum = sum + entry.value() else sum = sum - entry.value() 但我会试试你的问题......我会让你知道进展如何
    • @Stuart2041:好的试试
    • 从一开始我就尝试在不覆盖的情况下这样做,但我这样做了,因为当我在适配器内部创建一个方法时,它不允许我从 Activity 调用它,它说无法解析方法
    • 我想将哈希映射保存到共享首选项,因为当我再次按下按钮时,如果我更改了复选框的状态,它不会更新,所以这是创建 getter 的好方法返回相同的HashMap?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-02-04
    • 1970-01-01
    • 2012-08-13
    • 1970-01-01
    • 2014-07-31
    • 1970-01-01
    • 2013-05-08
    相关资源
    最近更新 更多