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

Reply via email to