Sunday, February 28, 2010

[android-developers] Re: Gridview loads in reverse on onConfigurationChanged

Hi Romain,

It is not the problem that the value of the 'position' parameter in
getView is 'out of order' when getView is called repeatedly. The
problem is that the actual layout of the GridView (i.e. the GridView's
items) is reversed in some occasions.

When the layout is not animated, you won't see any difference.
But when the layout is animated, you can clearly see that the layout
happens in reverse occasionally. This is just inconsistent and looks a
bit sloppy.


On Feb 28, 6:32 pm, Romain Guy <romain...@android.com> wrote:
> You cannot compare the position and the tag of a previously bound
> view. Like said before, there's no guarantee that a View previously
> used at position=X will be reused at the same position. Do not rely on
> this. At all. As for the convertView == null twice for the same
> position that's probably because your grid has a height =
> wrap_content.
>
>
>
>
>
> On Sun, Feb 28, 2010 at 2:22 PM, marmor <gaz...@gmail.com> wrote:
> > Hi,
>
> > I've been experiencing this problem too,
> > I don't rely on the order in which getView are called, but I do rely
> > on the position.
> > I noticed the *position* order (not call order) is reversed when I
> > turn on the onscreen keyboard, and back again when I exit it.
>
> > I've added a tag to the views i'm creating marking the position in
> > which they were created and I've printed this tag when convertView is
> > not null.
>
> > This is what I got for thee objects on the grid:
>
> >  count = 3
> >  pos = 0, conView = null
> >  new: pos = 0, v = ...@43d01ab0
> >  pos = 0, conView = ...@43d01ab0
> >  pos = 0, v = ...@43d01ab0, v.tag = 0
> >  pos = 1, conView = null
> >  new: pos = 1, v = ...@43d0bc70
> >  pos = 2, conView = null
> >  new: pos = 2, v = ...@43d0e2b8
> >  pos = 0, conView = null
> >  new: pos = 0, v = ...@43d0a2b8
> >  pos = 0, conView = ...@43d0e2b8
> > <here i opened the onscreen keyboard, notice the pos and tag conflict>
> >  pos = 0, v = ...@43d0e2b8, v.tag = 2
> >  pos = 1, conView = ...@43d0bc70
> >  pos = 1, v = ...@43d0bc70, v.tag = 1
> >  pos = 2, conView = ...@43d01ab0
> >  pos = 2, v = ...@43d01ab0, v.tag = 0
> >  pos = 0, conView = ...@43d0a2b8
> > <here i closed the onscreen keyboard, pos and tag conflict disappears>
> >  pos = 0, v = ...@43d0a2b8, v.tag = 0
> >  pos = 0, conView = ...@43d01ab0
> >  pos = 0, v = ...@43d01ab0, v.tag = 0
> >  pos = 1, conView = ...@43d0bc70
> >  pos = 1, v = ...@43d0bc70, v.tag = 1
> >  pos = 2, conView = ...@43d0e2b8
> >  pos = 2, v = ...@43d0e2b8, v.tag = 2
>
> > You can also notice I'm getting conView=null *twice* for position 0,
> > this is also a problem i think.
>
> > Any ideas?
>
> > Mor.
>
> > On Feb 26, 1:29 am, Bolha <lucasros...@gmail.com> wrote:
> >> Hi, Streets Of Boston.
>
> >> I haven't thought about that, maybe because myGridViewshows very few
> >> elements (like 10 or 20).
> >> Although seeing the getView method passing or not an instantiated
> >> view, I didn't realize that it was caching just the visible views.
>
> >> But how can we fix the sorting problem without doing a manual views
> >> caching? I've seen that thepositionparameters is informed in order,
> >> but I have no clue why the View instance doens't correspond to the
> >> correctposition.
> >> Oh, just to make it clear, I'm programming on SDK version 2.1 but
> >> running on a 1.5 device.
>
> >> Thanks for the help
>
> >> Bolha
>
> >> On 24 fev, 17:40, Streets Of Boston <flyingdutc...@gmail.com> wrote:
>
> >> > Thanks!
>
> >> > But I think you will get serious performance issues on GridViews and
> >> > ListViews with many items. In your fix, you cache the View for each
> >> > possible item. This defeats the purpose of the 'convertView' parameter
> >> > which has a non-null value when theGridViewre-uses a cached View.
> >> > The amount of Views cached by theGridViewis no more than the amount
> >> > of (partially) visible items on the screen
> >> > (=ListView.getChildCount()), not the number of possible items
> >> > (=BaseAdapter.getCount()), which can be much larger.
>
> >> > If you BaseApapter can have many items (more items than can be viewed
> >> > simultaneously on the screen), you'll likely to hit some serious
> >> > performance/memory/resource issues.
>
> >> > On Feb 24, 1:12 pm,Bolha<lucasros...@gmail.com> wrote:
>
> >> > > Hello, guys.
>
> >> > > I've had the same problem and solved it by saving the created views in
> >> > > an array inside the adapter. Check the chunks of code below:
>
> >> > > public class ImageButtonCanalAdapter extendsBaseAdapter{
> >> > >         private Context contexto;
> >> > >         private List<MyClass> list
> >> > >         private View savedViews[];
>
> >> > >        [...]
>
> >> > >         public View getView(intposition, View convertView, ViewGroup parent)
> >> > > {
> >> > >                 if (convertView == null) {
> >> > >                         this.viewsBotoes[position] = new MyView (this.contexto);
> >> > >                 }
>
> >> > >                 return this.viewsBotoes[position];
> >> > >         }
>
> >> > > }
>
> >> > > I hope it helps.
>
> >> > > Best regards.
>
> >> > >Bolha
>
> >> > > On 20 jan, 00:35, Streets Of Boston <flyingdutc...@gmail.com> wrote:
>
> >> > > > The animation is not necessary to make it happen. It just makes it
> >> > > > really easy to actually see the issue :-)
>
> >> > > > On Jan 19, 6:06 pm, Mike M <mike.mos...@gmail.com> wrote:
>
> >> > > > > yeah,
> >> > > > > I get the same on Droid 2.0, Although I get it without having
> >> > > > > animation applied to thegridview...
>
> >> > > > > I wish there was a uniform / sequential way that getView() was
> >> > > > > called...
>
> >> > > > > On Jan 18, 5:29 pm, Streets Of Boston <flyingdutc...@gmail.com> wrote:
>
> >> > > > > > Hi Roman,
>
> >> > > > > > It does happen. :-)
>
> >> > > > > > I can reproduce it almost every time like this:
> >> > > > > > - Just create an activity with a Grid View with quite a few images (or
> >> > > > > > grid-items) and attach a grid-layout-animator to the grid-view.
> >> > > > > > Configure the grid-view-animator in such a way that you see how the
> >> > > > > > grid-view-items are laid-out. E.g. columns first, rows later.
> >> > > > > > - Create an (empty) sub-activity that can be launched from the one
> >> > > > > > having the grid-view.
>
> >> > > > > > - Start your grid-view's activiy in portrait orientation.
> >> > > > > > - Start your sub-activity.
> >> > > > > > - Rotate your phone into landscape orientation.
> >> > > > > > - Press back to finish the sub-activity.
> >> > > > > >   The grid-view's activity is shown again and...
>
> >> > > > > > ... 9 out of 10 times, i see the grid-view being built up in reverse
> >> > > > > > mode (i'm running on 2.1, Nexus One).
>
> >> > > > > > In my app, the 'getView()' method does not rely on the order in which
> >> > > > > > the 'getView()' is called at all.
>
> >> > > > > > On Jan 18, 2:15 am, Romain Guy <romain...@android.com> wrote:
>
> >> > > > > > > I have never noticed such an issue. The only way I can think of that
> >> > > > > > > would cause this to happen would be if your adapter relies on the
> >> > > > > > > order of the getView() calls. Note there is absolutely no guarantee
> >> > > > > > > about the order in which getView() will be called (theposition
> >> > > > > > > argument will not necessarily be sequential, incrementing or
> >> > > > > > > decrementing.)
>
> >> > > > > > > On Sun, Jan 17, 2010 at 8:57 PM, Mike M <mike.mos...@gmail.com> wrote:
> >> > > > > > > > Streets of Boston,
>
> >> > > > > > > > Thanks for the reply.  I do have an animation on myGridView, but I
> >> > > > > > > > took it off and still notice the problem.
>
> >> > > > > > > > Any ideas?
>
> >> > > > > > > > Thanks
>
> >> > > > > > > > On Jan 17, 1:23 pm, Streets Of Boston <flyingdutc...@gmail.com> wrote:
> >> > > > > > > >> I've seen this too in my app.
>
> >> > > > > > > >> If you add a layout-animation, that animates the grid-view children
> >> > > > > > > >> (i.e. the grid-items), you can clearly see this reverse order.
>
> >> > > > > > > >> On Jan 17, 4:03 am, Mike M <mike.mos...@gmail.com> wrote:
>
> >> > > > > > > >> > Hey everyone,
>
> >> > > > > > > >> > I have agridviewof images that I load from the internet.  When the
> >> > > > > > > >> > phone rotates (or some other config change), onConfigurationChanged()
> >> > > > > > > >> > is called.  When that happens, the items in thegridvieware reversed
> >> > > > > > > >> > (meaning, the 1st image is the last; they are in reverse order).
>
> >> > > > > > > >> > Does anyone know why this is or how to change it?   I'm hoping someone
> >> > > > > > > >> > has run into this before...
>
> >> > > > > > > >> > Sorry if I don't share any code.  I don't think It'd help; it's more
> >> > > > > > > >> > of a conceptual question.
>
> >> > > > > > > >> > Thanks,
>
> >> > > > > > > >> > Mike
>
> >> > > > > > > > --
> >> > > > > > > > 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
>
> >> > > > > > > --
> >> > > > > > > Romain Guy
> >> > > > > > > Android framework engineer
> >> > > > > > > romain...@android.com
>
> >> > > > > > > Note: please don't send private questions to me, as I don't have time
> >> > > > > > > to provide private support.  All such questions should be posted on
> >> > > > > > > public forums, where I and others can see and answer them- Hide quoted text -
>
> >> > > > > > > - Show quoted text -- Hide quoted text -
>
> >> > > > > - Show quoted text -- Hide quoted text -
>
> >> > > - Show quoted text -
>
> > --
> > 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
>
> --
> Romain Guy
> Android framework engineer
> romain...@android.com
>
> Note: please don't send private questions to me, as I don't have time
> to provide private support.  All such questions should be posted on
> public forums, where I and others can see and answer them- Hide quoted text -
>
> - Show quoted text -

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

0 Comments:

Post a Comment

Subscribe to Post Comments [Atom]

<< Home


Real Estate