`
fantaxy025025
  • 浏览: 1245778 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类

android_Adapter_多次调用getview的position=0_position总是0

 
阅读更多

 

项目中,不论是ListView,还是GridView,自己定义的Adapter,在getView的时候,发现position总是0,从而导致只有第一行的view可以渲染出来。

 

经测试和查找,发现是android渲染和调用方式导致的。

 

ListView或者GirdView等都类似,如果高度设置不够,android在渲染的时候会去试探和探测高度,如果高度不够,则会停止渲染后面的position。

此时会有不少奇怪的调用出现。

- 比如后面还会调用getView方法,但每次positon的值都是0

- 本来getCount是5,但嗲用了4次getView

- 本来getCount是5,但抵用了6次getView

 

解决方法:

- 如果麽有view的嵌套,那么顶层的View是可以设置合适的高度的

- 如果有View嵌套,那么嵌套层的view的高度是动态的,很难确定的。此时直接设置wrap_content不好处理,只好在运行时,设置View的高度

- 其他方法,待补充吧

  期待完美的解决方案,简化代码~~

 

参考一个猜测:

原因在于GridView的item的layout中android:layout_height定义为wrap_content , 绘制item高度时系统并不知道item应该绘制多高,它会先取一条来试探以确定item绘制的具体高度,这样就导致多调用了一次getView方法。在滑动、长按等GridView需要重绘的情况下,getView的调用次数可能会不止多一次。

 

参考:

http://www.androidlearner.net/multiple-times-getview.html

http://www.eoeandroid.com/thread-280139-1-1.html

 

 

-

-

-

*

-

-

-

 

分享到:
评论

相关推荐

    android baseAdapter getview方法问题

    今天在写一个GridView的BaseAdapter时发现,Adapter的getview方法在position为0的时候会连续调用好几次。 我们知道谷歌时是做过优化的,让view有个缓存,我怀疑是因为做缓存的原因才让position连续调用 log如图 可见...

    viewflow实现类似淘宝,网易新闻的横幅banner,可循环自动播放

    然后在getview方法中,由于position不断递增,可以通过取余数来实现。Positon%length length为你图片实际的张数。例如我有3张图片,那么position=3显示的是第一张图片,跟position=0一样。最后在activity中初始化...

    Android ListView 子控件onClick正确获取position的方法

    发现,由于复用等原因,如果直接在子控件的onClick事件中调用getView()中的position,会出现数据或显示错位的问 题,原因就是position的值出现了重复或不准确,解决这个问题的方法是,在adapter每次加载数据的时候,...

    Android ListView适配器(Adapter)优化方法详解

    Adapter的作用就是ListView界面与数据之间的桥梁,当列表里的每一项显示到页面时,都会调用Adapter的getView方法返回一个View。想过没有? 在我们的列表有1000000项时会是什么样的?是不是会占用极大的系统资源? ...

    Android ListView 单条刷新方法实践及原理解析

    方法虽然简单,但这里面涉及到一个效率的问题,调用notifydatasetchange其实会导致adpter的getView方法被多次调用 (画面上能显示多少就会被调用多少次),如果是很明确的知道只更新了list中的某一个项的数据(比如...

    CommonAdapter-通过封装BaseAdapter和RecyclerView.Adapter得到的通用的,简易的Adapter.zip

     * @param position 当前adapter调用item的位置  */  void handleData(T model, int position); }例子:public class TextItem implements AdapterItem {  @Override  public int ...

    Picasso – Android系统的图片下载和缓存类库

    01.@Override public void getView(int position, View convertView, ViewGroup parent) { 02.SquaredImageView view = (SquaredImageView) convertView; 03.if (view == null) { 04.view = new ...

    SwipeDragTreeRecyclerView-可滑动和拖拽的树形结构RecyclerView.zip

    StartDragFlag 为 adapter 的静态内部类,你直接使用即可initIds() 在这个方法中你应该调用下面2个方法完成相关初始化bindData(BaseViewHolder holder, TypeData data) 你应该调用 holder.getItemViewType() 方法...

    android开发中ListView与Adapter使用要点介绍

    1. Adapter.getView() public View getView(int position, View convertView , ViewGroup parent){…} 这个方法就是用来获得指定位置要显示的View。官网解释如下: Get a View that displays the data at the ...

    Android 自定义ListView示例详解

    本文讲实现一个自定义列表的Android程序,程序将实现一个使用自定义的适配器(Adapter)绑定 数据,通过contextView.setTag绑定数据有按钮的ListView。 系统显示列表(ListView)时,首先会实例化一个适配器,本文...

    Android App中ViewPager与Fragment结合的一些问题解决

    在了解ViewPager的工作原理之前,先回顾ListView的工作原理: ListView只有在需要显示某些列表项时,它才会去申请可用的视图对象;如果为所有的列表项数据创建...紧接着ListView就调用adapter的getView(int, View, Vi

    Android编程使用缓存优化ListView的方法

    ListView调用Adapter的getView方法获取每一个Item布局,将这些已经获得的Item布局放入缓存,将大大提高获取数据的效率,而且节省更多的流量,将数据进行缓存有两种方法是,一种是将内存缓存一种是sd卡缓存,在此分别...

Global site tag (gtag.js) - Google Analytics