android创建listview有两个项目,复选框和多项选择,来自数据库的数据

时间:2013-01-22 17:11:36

标签: android-listview

抱歉我的英文, 这是我第一次在这个网站上写,但我还是很长。 我有一个数据库,我想将数据绑定到具有复选框和多项选择的列表视图,它给了我 令人头疼的是制作自定义的simplecursoradapter(因为是两列(项)),没有预先确定。

我可以推荐这样做的帖子或教程。

感谢您的合作

例如

5 / a / x

1 / b / -

3 / c / x

2 / d / -

8 / e / x

0.5 / f / -

1 个答案:

答案 0 :(得分:0)

好, 我得到了我想要的东西,我把代码放在有人会感兴趣的地方。

现在我有两个错误,我想解决的是: - 在列表视图中滚动时,不删除所选复选框。 - 不重复任何值,例如(选择1,2,3并显示1,12,123

感谢您的关注

代码:

final Dialog dialogo_medicamentos = new Dialog(this);                   dialogo_medicamentos.setContentView(R.layout.dialogo_medicamentos);

              dialogo_medicamentos.setTitle(R.string.tv_medicamentos);  
              dialogo_medicamentos.setCancelable(false);  
             final ListView lv_medicamentos = (ListView) dialogo_medicamentos.findViewById(R.id.lv_medicamentos);
             BDHelper medicamentos = new BDHelper (this);
                try {
                    medicamentos.createDataBase();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
                medicamentos.abrir();
                c_me = medicamentos.lista_medicamentos();
                String[] from_me = new String [] {"_id","dosis","medicamentos"};
                int [] to_me = new int [] {R.id.trc_tv_id, R.id.trc_tv_dosis, R.id.trc_tv_medicamentos};
                SimpleCursorAdapter adapter_medicamentos = new SimpleCursorAdapter (this, R.layout.trc_medicamentos, c_me, from_me, to_me){

                class ViewHolder {
                       TextView vh_trc_tv_dosis;
                       TextView vh_trc_tv_medicamentos;
                       CheckBox vh_trc_cb_medicamentos;
                       }
                @Override
                    public View getView(final int position, View convertView, ViewGroup parent) {
                    final ViewHolder holder;
                    if (convertView == null) {
                        LayoutInflater Inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                        convertView = Inflater.inflate(R.layout.trc_medicamentos, null);

                        holder = new ViewHolder();
                        holder.vh_trc_tv_dosis = (TextView) convertView.findViewById(R.id.trc_tv_dosis);
                        holder.vh_trc_tv_medicamentos = (TextView) convertView.findViewById(R.id.trc_tv_medicamentos);
                        holder.vh_trc_cb_medicamentos =(CheckBox) convertView.findViewById(R.id.trc_cb_medicamentos);
                        convertView.setTag(holder);

                } else {
                        holder = (ViewHolder) convertView.getTag();
                    }
                    c_me.moveToPosition(position);
                    i_dos = c_me.getColumnIndex(BDHelper.ID_DOSIS);
                    i_med = c_me.getColumnIndex(BDHelper.ID_MEDICAMENTOS);

                    String ss_dos = c_me.getString(i_dos);   
                    String ss_med = c_me.getString(i_med);
                    holder.vh_trc_tv_dosis.setText(ss_dos);
                    holder.vh_trc_tv_medicamentos.setText(ss_med);

                    holder.vh_trc_cb_medicamentos.setChecked(false);

                    holder.vh_trc_cb_medicamentos.setOnCheckedChangeListener(new OnCheckedChangeListener() {

                        public void onCheckedChanged(CompoundButton checkBox, boolean isChecked) {
                            ArrayList<Boolean> itemChecked = new ArrayList<Boolean>();
                            for (int i = 0; i < getCount(); i++) {
                                itemChecked.add(i, false);
                            }

                            if (holder.vh_trc_cb_medicamentos.isChecked()) {
                                itemChecked.set(position, true);
                                c_me.moveToPosition(position);
                                i_dos = c_me.getColumnIndex(BDHelper.ID_DOSIS);
                                i_med = c_me.getColumnIndex(BDHelper.ID_MEDICAMENTOS);
                                s_dos_checked += c_me.getString(i_dos) + ("\n");
                                s_med_checked += c_me.getString(i_med) + ("\n");
                                checked_medicamentos += s_dos_checked + ("\n");

                            } else if (!holder.vh_trc_cb_medicamentos.isChecked()) {
                                itemChecked.set(position, false);

                            }



                            Log.d(LOGCAT,"FUNCIONA");
                            Log.d(LOGCAT,s_dos_checked);
                            Log.d(LOGCAT,s_med_checked);
                        }
                    });
                    return convertView;
                    }

                    };
                if(adapter_medicamentos.getCount()!=0){
                      lv_medicamentos.setAdapter(adapter_medicamentos); 

                }else{
                    Toast.makeText(this, this.getString(R.string.t_listado_med_vacio),Toast.LENGTH_SHORT).show();
                }
                  lv_medicamentos.setItemsCanFocus(false);
                  lv_medicamentos.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
                  medicamentos.close();

                                  Button bt_aceptar_me = (Button) dialogo_medicamentos.findViewById(R.id.bt_aceptar_me);
              bt_aceptar_me.setOnClickListener(new OnClickListener() {
                    public void onClick(View v) {
                        dialogo_medicamentos.dismiss();
                        Log.d(LOGTAG,checked_medicamentos);
                        et_medicamentos_reg.setText (checked_medicamentos);     

                    }
                    });
                Button bt_cancelar_me = (Button) dialogo_medicamentos.findViewById(R.id.bt_cancelar_me);
                bt_cancelar_me.setOnClickListener(new OnClickListener() {
                    public void onClick(View v) {
                dialogo_medicamentos.dismiss();
                    }
                    });
                dialogo_medicamentos.show();
                et_medicamentos_reg.clearFocus();