Dianne,

Thanks so much for responding.

Let me ask, to be sure. Does the ListView do its updating on the UI thread?
I ask becasue it seems the call to BaseAdapter.notifyDataSetChanged() is
synchronous (so it could be spawning another thread to do the work).

I am pretty sure the adapter in this app is not being modified outside of
the UI thread but I can cause the exception to be thrown.

Thanks,

On Thu, Nov 19, 2009 at 2:24 PM, Dianne Hackborn <hack...@android.com>wrote:

> As the exception says:
>
>                 throw new IllegalStateException("The content of the adapter
> has changed but "
>                         + "ListView did not receive a notification. Make
> sure the content of "
>                         + "your adapter is not modified from a background
> thread, but only "
>                         + "from the UI thread. [in ListView(" + getId() +
> ", " + getClass()
>                         + ") with Adapter(" + mAdapter.getClass() + ")]");
>
> You can't modify an adapter from a background thread; this must be done on
> the main thread.
>
> This exception is not adding a restriction; it is making it more obvious
> when you do something that would always break in weird, subtle, and/or
> horrible ways.
>
> On Thu, Nov 19, 2009 at 5:56 AM, WoodManEXP <woodman...@gmail.com> wrote:
>
>> For Google about BaseAdapter class
>>
>> In Android 1.6 and 2.0 the BaseAdapter class has apparently been
>> modified to throw an exception when it sees the Adapter.getCount()
>> method return a number different than what it picked up when
>> BaseAdapter.notifyDataSetChanged() was called (at least I did not
>> observe this behavior in pre 1.6).
>>
>> So now the question is, when should one call notifyDataSetChanged() or
>> more importantly, when can the count in the Adapter be safely changed?
>>
>> Consider the case of an app with a background thread delivering data
>> to a BaseAdapter at a rate faster than the ListView responds to
>> notifyDataSetChanged(). Because notifyDataSetChanged() is a
>> synchronous call and the ListView updates are taking place sometime in
>> the indeterminate future on the UI thread, how can an app know when it
>> is safe to change the adapter count?
>>
>> If the app changes the count while the ListView is updating itself the
>> exception will be thrown (and there is no way to catch the exception).
>>
>> Is there a way to know when it is safe to change the count in the
>> BaseAdapter?
>>
>> --
>> 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%2bunsubscr...@googlegroups.com>
>> For more options, visit this group at
>> http://groups.google.com/group/android-developers?hl=en
>>
>
>
>
> --
> Dianne Hackborn
> Android framework engineer
> hack...@android.com
>
> Note: please don't send private questions to me, as I don't have time to
> provide private support, and so won't reply to such e-mails.  All such
> questions should be posted on public forums, where I and others can see and
> answer them.
>
>  --
> 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%2bunsubscr...@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