抱歉我的英文, 这是我第一次在这个网站上写,但我还是很长。 我有一个数据库,我想将数据绑定到具有复选框和多项选择的列表视图,它给了我 令人头疼的是制作自定义的simplecursoradapter(因为是两列(项)),没有预先确定。
我可以推荐这样做的帖子或教程。
感谢您的合作
例如
5 / a / x
1 / b / -
3 / c / x
2 / d / -
8 / e / x
0.5 / f / -
答案 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();