[android-developers] Re: What is wrong with Android Adapters?
On Feb 15, 8:24 pm, Kostya Vasilyev wrote: > I took a break for over 10 minutes, leaving logcat running, and... > sorry, it just doesn't. Very interesting :) Thanks for trying it Cheers, Olof -- 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
[android-developers] Re: What is wrong with Android Adapters?
Views are recycled, though I do not cache findViewById-calls at the moment (as with the ViewHolder pattern) I don't think that should affect how many calls I get to "getView"... thanks for the tip though, it should lessen the impact a bit. But android still seems a bit broken in this detail... There are no extra calls to notifyDatasetChanged. Cheers, Olof On Feb 14, 10:10 am, jamesc wrote: > Hello > > Are you using the ViewHolder pattern to recycle Views? > > On Feb 13, 9:48 am, Olof Hedman wrote: > > > > > > > > > I have implemented a couple of differentadaptersin my application. > > > No matter which base class I use, I get very weird behavior in how the > > list calls it to create and bind its views. > > > I've tested this on 2.3.3, 2.3.6 and Kindle. > > > This log is from an implementation of BaseAdapter, I put a debug-print > > in "getView". > > If convertView is null I inflate the view and print "created view". > > For every call to getView I print "binding View" when I set its > > values. > > The code on the end is an id string for the data I bind to the views. > > > Everything display just as it should, but I get lots of unneccessary > > binds! > > > This is what I get when I set the adapter to the listview: > > > D/SLPA ( 4097): created View -android.widget.LinearLayout@405bf190 > > D/SLPA ( 4097): binding View -android.widget.LinearLayout@405bf190 > > position: 0 - to: A5D7W5U9.02 > > D/SLPA ( 4097): binding View -android.widget.LinearLayout@405bf190 > > position: 1 - to: ASQK89Q8.58 > > D/SLPA ( 4097): binding View -android.widget.LinearLayout@405bf190 > > position: 2 - to: ASQK89Q8.37 > > D/SLPA ( 4097): binding View -android.widget.LinearLayout@405bf190 > > position: 3 - to: AEURWHRA.02 > > D/SLPA ( 4097): binding View -android.widget.LinearLayout@405bf190 > > position: 4 - to: ASQK89Q8.44 > > D/SLPA ( 4097): binding View -android.widget.LinearLayout@405bf190 > > position: 5 - to: ASQK89Q8.51 > > D/SLPA ( 4097): binding View -android.widget.LinearLayout@405bf190 > > position: 6 - to: ASQK89Q8.10 > > D/SLPA ( 4097): binding View -android.widget.LinearLayout@405bf190 > > position: 7 - to: AWQHVP6A.11 > > D/SLPA ( 4097): binding View -android.widget.LinearLayout@405bf190 > > position: 0 - to: A5D7W5U9.02 > > D/SLPA ( 4097): binding View -android.widget.LinearLayout@405bf190 > > position: 1 - to: ASQK89Q8.58 > > D/SLPA ( 4097): binding View -android.widget.LinearLayout@405bf190 > > position: 2 - to: ASQK89Q8.37 > > D/SLPA ( 4097): binding View -android.widget.LinearLayout@405bf190 > > position: 3 - to: AEURWHRA.02 > > D/SLPA ( 4097): binding View -android.widget.LinearLayout@405bf190 > > position: 4 - to: ASQK89Q8.44 > > D/SLPA ( 4097): binding View -android.widget.LinearLayout@405bf190 > > position: 5 - to: ASQK89Q8.51 > > D/SLPA ( 4097): binding View -android.widget.LinearLayout@405bf190 > > position: 6 - to: ASQK89Q8.10 > > D/SLPA ( 4097): binding View -android.widget.LinearLayout@405bf190 > > position: 7 - to: AWQHVP6A.11 > > D/SLPA ( 4097): binding View -android.widget.LinearLayout@405bf190 > > position: 0 - to: A5D7W5U9.02 > > D/SLPA ( 4097): created View -android.widget.LinearLayout@405ab368 > > D/SLPA ( 4097): binding View -android.widget.LinearLayout@405ab368 > > position: 1 - to: ASQK89Q8.58 > > D/SLPA ( 4097): created View -android.widget.LinearLayout@405a85f8 > > D/SLPA ( 4097): binding View -android.widget.LinearLayout@405a85f8 > > position: 2 - to: ASQK89Q8.37 > > D/SLPA ( 4097): created View -android.widget.LinearLayout@40548088 > > D/SLPA ( 4097): binding View -android.widget.LinearLayout@40548088 > > position: 3 - to: AEURWHRA.02 > > D/SLPA ( 4097): created View -android.widget.LinearLayout@405743e0 > > D/SLPA ( 4097): binding View -android.widget.LinearLayout@405743e0 > > position: 4 - to: ASQK89Q8.44 > > D/SLPA ( 4097): created View -android.widget.LinearLayout@405877c0 > > D/SLPA ( 4097): binding View -android.widget.LinearLayout@405877c0 > > position: 5 - to: ASQK89Q8.51 > > > Its not weird that users complain of sluggish UI if these things are > > going on! > > > When the device goes into sleep, I get this: > > > D/SLPA ( 4097): created View -android.widget.LinearLayout@40555a00 > > D/SLPA ( 4097): binding View -android.widget.LinearLayout@40555a00 > > position: 0 - to: A5D7W5U9.02 > > D/SLPA ( 4097): binding View -android.widget.LinearLayout@40555a00 > > position: 1 - to: ASQK89Q8.58 > > D/SLPA ( 4097): binding View -android.widget.LinearLayout@40555a00 > > position: 2 - to: ASQK89Q8.37 > > D/SLPA ( 4097): binding View -android.widget.LinearLayout@40555a00 > > position: 3 - to: AEURWHRA.02 > > D/SLPA ( 4097): binding View -android.widget.LinearLayout@40555a00 > > position: 4 - to: ASQK89Q8.44 > > D/SLPA ( 4097): binding View -android.widget.LinearLayout@40555a00 > > position: 5 - to: ASQK89Q8.51 > > D/SLPA ( 4097): binding View -android.widget.LinearLayout@40555a0
[android-developers] Re: What is wrong with Android Adapters?
Hi, Thank you for answering. I wanted to keep the post brief until I found someone interested. I've got code for another adapter implementation on stackoverflow, which show the exact same pattern in the calls to getView. Though this is a CursorTreeAdapter, so it calls "newView" and "bindView" for me in its implementation of "getView" http://stackoverflow.com/questions/9250781/cursortreeadapter-binding-views-excessivly-very-weird-behaviour Any adapter I implement have the same pattern in how getView is called. They all look like they work perfectly, until you look closer on how the methods are called. Specially the 3x rebinding of all views when I enter powerdown is very curious. (There is nothing done in onPause that should affect the list) Here is a third adapter that also show the exact same pattern, and is the most minmal I have: http://pastebin.com/hutfJPcN It implements ListAdapter, because at that point I had overlooked BaseListAdapter, but it shouldn't matter. Cheer, Olof On Feb 15, 12:43 am, Doug wrote: > On Feb 13, 1:48 am, Olof Hedman wrote: > > > Is there anyone who can shed some light on this, is it just something > > I have to live with, or have I made some stupid mistake? > > I have a hard time imagining anything I could have done wrong though, > > since the code is really minimal. > > Why aren't you showing your code, since it is so minimal? Your log > isn't helping anyone understand what you actually did. BTW, "minimal" > doesn't equate to "correct". > > If anything at all is invalidating views in your list, it may be > getting rebuilt. If your adapter is getting refreshed somehow, it may > be getting rebuilt. > > You could also try starting with a sample from ApiDemos and building > from there. > > Doug -- 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