Hi! I have ONE annoying problem with SimpleCursorAdapter. My programm has list view and ListActivity. Each row has it's own layout:
<TableLayout xmlns:android="http://schemas.android.com/apk/res/ android" android:layout_height="wrap_content" android:layout_width="fill_parent" android:orientation="horizontal" android:weightSum="1.0"> <TableRow> <TextView android:id="@+id/task_time" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="24sp" android:text="Time"> </TextView> <LinearLayout android:orientation="vertical" android:layout_width="wrap_content" android:layout_height="fill_parent"> <TextView android:id="@+id/task_name" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="20sp" android:text="Name"> </TextView> <TextView android:id="@+id/task_categoty" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Category" android:textSize="12sp"> </TextView> </LinearLayout> <TextView android:id="@+id/task_state" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="State" android:textSize="12sp"> </TextView> <CheckBox android:id="@+id/task_enabled" android:layout_width="wrap_content" android:layout_height="wrap_content" android:focusable="false"> </CheckBox> </TableRow> Tasks are stored in SQLite database. I have DAO object (singleton) to access the database. TaskDao: public void updateEnabled(int id, boolean enabled){ SQLiteDatabase db = dbHelper.getWritableDatabase(); ContentValues cv = new ContentValues(); cv.put(ENABLED_COLUMN, enabled==true?1:0); Log.i(TAG, "update to " + cv.get(ENABLED_COLUMN) ); try{ db.beginTransaction(); db.update(TASK_TABLE, cv, ID_COLUMN+"=?", new String[]{id +""}); db.setTransactionSuccessful(); } catch (SQLException e) { Log.i(TAG, "edit task failed!"); } finally { db.endTransaction(); if (db != null) db.close(); } } and the Cursor method for ListActivity: public Cursor getTasks(){ SQLiteDatabase db = dbHelper.getReadableDatabase(); return db.query(TASK_TABLE, COLUMNS, null, null, null, null, NAME_COLUMN); } I extended SimpleCursorAdapter (TaskDbAdapter) like this: @Override public View getView(int position, View convertView, ViewGroup parent) { if(convertView==null){ convertView = inflater.inflate(R.layout.task_list_row, null); } Cursor c = getCursor(); c.moveToPosition(position); Log.i(TAG, "getView " + position + " = " + c.getInt(enabledIdx)); enabled.setTag(c.getInt(c.getColumnIndex(BaseColumns._ID))); enabled.setChecked(c.getInt(enabledIdx)>0?true:false); enabled.setOnClickListener(this); return convertView; } @Override public void onClick(View v) { CheckBox box = (CheckBox) v; Integer id = (Integer)box.getTag(); TaskDao.getInstance(context).updateEnabled(id.intValue(), box.isChecked()); } And at last I use all the above stuff in my main ListActivity private void refreshList(){ c = TaskDao.getInstance(this).getTasks(); startManagingCursor(c); adapter = new TaskDbAdapter(this, R.layout.task_list_row, c, new String[]{TaskDao.ENABLED_COLUMN}, new int[]{R.id.task_enabled}); setListAdapter(adapter); } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.task); getListView().setItemsCanFocus(false); getListView().setChoiceMode(ListView.CHOICE_MODE_MULTIPLE); getListView().setVerticalScrollBarEnabled(true); registerForContextMenu(getListView()); getListView().setOnCreateContextMenuListener(this); refreshList(); } @Override protected void onResume() { super.onResume(); refreshList(); } @Override protected void onPause() { super.onPause(); } Everything works fine. But CheckBoxes loose their states. For instance I check my first column and scroll the list down. In my trace before press I have: getView 0 = 0 getView 2 = 0 getView 3 = 0 then uptate to 1 and then (when I scroll up to the first element) getView 0 = 0 getView 2 = 0 getView 3 = 0 I tried to make getCursor().requery(); in my TaskDbAdapter onClick method. But then I saw no items in the list! And exception because of cursor management(connection was closed by android). When I write startManagingCursor(c); in refreshList() method then check and uncheck methods don't work. Please, Help! -- You received this message because you are subscribed to the Google Groups "Android Developers" group. To post to this group, send email to [email protected] To unsubscribe from this group, send email to [email protected] For more options, visit this group at http://groups.google.com/group/android-developers?hl=en

