从自定义ListView

时间:2016-05-26 14:53:31

标签: java android listview checkbox

我已经实现了一个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的东西......

1 个答案:

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