Monday, December 31, 2012

Re: [android-developers] Re: Bad View Behavior with Changing ListViews

Guys,

Thanks so much for your suggestions. I had tried all of the notify* and invalidate* methods on the adapter and list to no avail. The easiest solution for me was removing the swapCursor( null ) call. After doing this, the "orphaned" views no longer persist and everything is working as expected.

Thanks guys!

E


On Sun, Dec 30, 2012 at 10:48 AM, Nobu Games <dev.nobu.games@gmail.com> wrote:
I just checked the implementation of (Simple)CursorAdapter. Calling swapCursor with argument null (instead of another cursor object) internally calls notifyDataSetInvalidated. That is basically a "death sentence" for an Adapter and signals to the ListView it belongs to that the data source should not be used anymore.

Why it seems to still be working erratically after setting a different cursor object might have to do with an internal bug in ListView and its view caching strategies. You just triggered a sequence of events that is undefined or not allowed to happen in the framework.

So you have three options:

1. Don't call swapCursor(null)
2. If you want the ListView to be blank then call listView.setAdapter(null)
3. Or temporarily let Adapter.getCount() return 0 and call notifyDataSetChanged until the new cursor is loaded.


On Wednesday, December 19, 2012 9:23:25 PM UTC-6, Evan Ruff wrote:
Hey guys,

I'm having some funny issues with my ListViews. Generally, I have a ListView activity where the list view takes up the entire activity. The list views are using a custom SimpleCursorAdapter and are using the supportLoaderManager to load in the data. The Loaders are connected to Observers and the data can be changed by background services. I'm getting some weird behavior when the data changes.

When the data changes, I am doing an adapter.swapCursor( null ) while the new data is loading.

When the list gets shorter, I'm getting black areas where the previous views where, and sometime I'm getting ~ghosting of older views if the removed views are at the bottom of the list. Is there some way to enforce invalidation or removal of these views?

Is there some step I'm missing?

Thanks!

E

--
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+unsubscribe@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+unsubscribe@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/android-developers?hl=en

No comments:

Post a Comment