我已经实现了一个HashMap,其中键是一个字符串,值是一个整数,我想知道如何获取单击的单选按钮的值,获取值,然后如果我可以用它们做一些操作,例如:
Cb1 2经过检查
Cb2 9已检查
Cb3 19 UnChecked
输出应为11(2 + 9)
所以我想做一些已检查的并用该值更新TextView。
从现在开始我有这个:
这是HashMap
HashMap<String, Integer> hmAs = new LinkedHashMap<String, Integer>();
这就是我创建Dialog的方式
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
我可以得到CheckBox
ListView
的总和
好吧,我最终做了这样的事情:
我创建了一个名为Sessio
的类,其中包含int
(sessio的值)和boolean
,以检查是否选中了复选框。好吧,我必须保存SharedPreferences
上的支票,我一直在这里阅读,你会建议不要在HashMap
上保存SharedPreferences
,因为它需要大量的内存,好吧..所以这个想法是一样的,我必须保存所有的hashmap以及哪一个被点击或者没有,我认为要计算CheckBox
的东西......
答案 0 :(得分:0)
按&#34;接受&#34;我可以得到所有CheckBox的总和 的ListView
在HashMapArrayAdapter
内创建一个方法,该方法返回已检查的条目值并在Accept
上调用它按钮点击:
1。声明一个HashMap,其位置为键,entry.getValue()
为键,用于存储已检查的CheckBox值:
Map<Integer, String> checkedCheckBoxValues = new HashMap<Integer, String>();
2。现在创建一个在HashMap<Integer, String>
类中返回HashMapArrayAdapter
的方法:
public HashMap<Integer, String> getCheckedCheckBoxs(){
return checkedCheckBoxValues;
}
3。将onCheckedChanged
内的键和值添加到checkedCheckBoxValues
:
checkedCheckBoxValues.put(position,String.valueOf(entry.getValue()));
4。在getCheckedCheckBoxs
上调用Accept
方法点按adapter
:
@Override
public void onClick(View v) {
mDialog.dismiss();
HashMap<Integer, String> checkedValues=adapter.getCheckedCheckBoxs();
}