Thank you Very much Kostya. In fact I was closing the db at the end of
the onCreate() method after I attached the cursor. When canceled that
it works good. It's even better than before. Anyway I close the db in
the onPause() so that should cause any problems further. But I will
also try to take a look at the mChangeObserver that you suggested. I
saw it in the source code. Again thank you Kostya - you are a big help
and that's not for the first time :>

On 5 Sty, 13:10, Kostya Vasilyev <[email protected]> wrote:
> Adam,
>
> I see in your code below that you're closing the database immediately
> after querying it (getting the cursor).
>
> This is wrong - a cursor should have an open database to work with.
>
> Also, updates like you're trying to implement are automatic if you use
> ContentProvider with a CursorAdapter (on the data and UI sides
> respectively).
>
> Although I'm not familiar with the inner workings on ContentProvider /
> Resolver framework, maybe we can learn something from the source:
>
> The source for CursorAdapter can be found here:
>
> http://www.netmite.com/android/mydroid/frameworks/base/core/java/andr...
>
> It registers a ContentObserver with the cursor and calls
> cursor.requery() when needed.
>
> On the ContentProvider side, delete() fires off a notification by calling:
>
> getContext().getContentResolver().notifyChange(uri, null);
>
> Based on that, you could try subclassing CursorAdapter, get
> mChangeObserver (it's protected) and call onChange() to simulate a
> notifcation normally delivered from ContentProvider.
>
> -- Kostya
>
> 14.12.2010 13:10, Serdel пишет:
>
>
>
> > Hello,
>
> > I have a listview and my implementation of the CursorAdapter. As a
> > part of my list item I have a delete button. When the user presses the
> > button I show a dialog asking for confirmation and if the user presses
> > ok I delete the item from the database. The problem is with refreshing
> > the listview. I tried calling cursor.requery() and
> > mAdapter.notifyDataSetChanged() (separately or both) but that doesn't
> > help. Requery clears the list and it re-appears (without the missing
> > item) after re-entering the activity. notifyDataSetChanged does
> > nothing (the item is still on the list) and again it is ok after re-
> > entering the activity. I have managed to make this working after
> > reloading the whole database:
>
> >   //in the dialog:
> > {
> > DBAdapter db = new DBAdapter( getApplicationContext() );
> > db.open();
>
> > db.deleteTitle( rowid );
>
> > db.close();
>
> > //cursor.requery();
> > //mAdapter.notifyDataSetChanged();
>
> > fillData();
> > }
> > ////////////////////////////////////////
>
> > private void fillData() {
>
> >            try{
> >            db.open();
> >            cursor = db.getAllTitles();
> >            startManagingCursor(cursor);
>
> >             mAdapter = new MyIDsListCursorAdapters(this, R.layout.myidsrow,
> > cursor, columns, to);
>
> >            setListAdapter(mAdapter);
> >            db.close();
> >         }catch (SQLException e){
> >            showDatabaseErrorDialog ();
> >         }
> >     }
>
> > But reloading the whole db seems to be a very expensive task and I'm
> > quite sure there must be a better way to do this.
>
> > I also have another problem - my listview items are defined by a
> > relativelayout. However the layout seems to be ignoring all 'vertical'
> > attributes, like alignParentBottom or centerVertical. I have seen an
> > google I/O with Romain Guy and he answered a similar question by
> > saying we should pass the parent ViewGroup followed by false, to the
> > inflate function, but that still doesn’t solve my problem. Don’t know
> > what is going on here. I solved this by placing my items below some
> > others and playing with the margin/padding but I don’t really like
> > that solution.
>
> --
> Kostya Vasilyev -- WiFi Manager + pretty widget 
> --http://kmansoft.wordpress.com

-- 
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