#android #checkbox #cursor
Вопрос:
У меня есть представление списка, заполненное отфильтрованными данными из базы данных SQLite с помощью SimpleCursorAdapter
Однако я всегда получаю _id от следующего элемента в списке; курсор всегда находится на один элемент дальше.
например: Если я нажму на элемент с 7142, он вернет 7243; в 7243 идентификатор 7037 и так далее, как здесь: _id 7242 7243 7037 7116
Что случилось с моим адаптером? Как я должен изменить код? Может кто-нибудь показать мне решение с наилучшими пожеланиями
С помощью этого адаптера я заполняю ListView
MyDataAdapter a = new MyDataAdapter(getActivity(), R.layout.fts_card, crs, from, to);
searchLv.setSelection(0);
searchLv.setAdapter(a);
a.notifyDataSetChanged();
и это мой пользовательский адаптер
enter public class MyDataAdapter extends SimpleCursorAdapter {
private Cursor c;
private Context context;
String rowID;
int columnvalue;
MY_DB db;
private ArrayList<Boolean> itemChecked = new ArrayList<Boolean>();
public MyDataAdapter(Context context, int layout, Cursor c, String[] from,
int[] to ) {
super(context, layout, c, from, to);
this.c = c;
this.context = context;
for (int i = 0; i < this.getCount(); i ) {
itemChecked.add(i, false);
}
}
public View getView(final int pos, View inView, ViewGroup parent) {
if (inView == null) {
LayoutInflater inflater = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
inView = inflater.inflate(R.layout.fts_card, null);
}
this.c.moveToPosition(pos);
((TextView) inView.findViewById(R.id.fts_tvTitel)).setText(c.getString(c.getColumnIndex("titel")));
final CheckBox cBox = inView.findViewById(R.id.fts_chBoxWichtig); // my CheckBox
final View toastInView = inView;
rowID = c.getString(c.getColumnIndex("_id"));
cBox.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
CheckBox cb = (CheckBox) v.findViewById(R.id.fts_chBoxWichtig);
if (cb.isChecked()) {
itemChecked.set(pos, true);
// Update the DB
Toast.makeText(toastInView.getContext(), rowID , Toast.LENGTH_SHORT).show();
} else if (!cb.isChecked()) {
itemChecked.set(pos, false);
// do some operations here
cb.setText("Is nothing");
}
notifyDataSetChanged();
}
});
cBox.setChecked(itemChecked.get(pos));
return inView;
}
}