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

