Its better to use

ArrayAdapter<String> adapter=new
ArrayAdapter<String>(playlist_new.this,android.R.layout.simple_list_item_multiple_choice,song_name);
        lv.setAdapter(adapter);
         lv.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);

On Sat, Jan 29, 2011 at 10:51 PM, Nick <[email protected]> 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 [email protected]
> To unsubscribe from this group, send email to
> [email protected]<android-developers%[email protected]>
> 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 [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

Reply via email to