I'm using SimpleCursorAdapter just because I store data in the database. And you suggested to use standard layout what isn't suitable for me.
On 29 янв, 20:46, Robin Talwar <r.o.b.i.n.abhis...@gmail.com> wrote: > Its better to use > > ArrayAdapter<String> adapter=new > ArrayAdapter<String>(playlist_new.this,android.R.layout.simple_list_item_mu > ltiple_choice,song_name); > lv.setAdapter(adapter); > lv.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE); > > > > > > > > On Sat, Jan 29, 2011 at 10:51 PM, Nick <ympe...@gmail.com> wrote: > > 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 android-developers@googlegroups.com > > To unsubscribe from this group, send email to > > android-developers+unsubscr...@googlegroups.com<android-developers%2Bunsubs > > cr...@googlegroups.com> > > For more options, visit this group at > >http://groups.google.com/group/android-developers?hl=en -- You received this message because you are subscribed to the Google Groups "Android Developers" group. To post to this group, send email to android-developers@googlegroups.com To unsubscribe from this group, send email to android-developers+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/android-developers?hl=en