自定义listview适配器getView方法多次被调用,并且没有一致的顺序

自定义listview适配器getView方法多次被调用,并且没有一致的顺序

我有一个自定义列表适配器:

class ResultsListAdapter extends ArrayAdapter<RecordItem> {

在重写的‘getView’方法中,我执行一个打印来检查什么位置以及它是否是一个转换视图:

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        System.out.println("getView " + position + " " + convertView);

它的输出(当第一次显示列表时,还没有用户输入)

04-11 16:24:05.860: INFO/System.out(681): getView 0 null  04-11 16:24:29.020: INFO/System.out(681):
 getView 1 android.widget.RelativeLayout@43d415d8  04-11 16:25:48.070: INFO/System.out(681): 
 getView 2 android.widget.RelativeLayout@43d415d8  04-11 16:25:49.110: INFO/System.out(681): 
 getView 3 android.widget.RelativeLayout@43d415d8  04-11 16:25:49.710: INFO/System.out(681): 
 getView 0 android.widget.RelativeLayout@43d415d8  04-11 16:25:50.251: INFO/System.out(681): 
 getView 1 null  04-11 16:26:01.300: INFO/System.out(681): getView 2 null  04-11 16:26:02.020: INFO/System.out(681):
  getView 3 null  04-11 16:28:28.091: INFO/System.out(681): getView 0 null  04-11 16:37:46.180: INFO/System.out(681):
   getView 1 android.widget.RelativeLayout@43cff8f0  04-11 16:37:47.091: INFO/System.out(681): 
   getView 2 android.widget.RelativeLayout@43cff8f0  04-11 16:37:47.730: INFO/System.out(681): 
   getView 3 android.widget.RelativeLayout@43cff8f0

AFAIK虽然找不到明确的声明,但getView()只对可见的行调用。由于我的应用程序从四行可见开始,至少从0-3循环的位置号是有意义的。但剩下的都是一团糟:

  • 为什么每一行都要调用getview三次?
  • 当我还没有滚动的时候,这些转换视图是从哪里来的呢?

我做了一些研究,但没有得到一个好的答案,我确实注意到人们把这个问题和布局问题联系在一起。因此,以防万一,下面是包含列表的布局:

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_height="fill_parent"
    android:layout_width="fill_parent" 
    android:orientation="vertical" >

    <TextView android:id="@+id/pageDetails"
        android:layout_width="fill_parent" 
        android:layout_height="wrap_content" />

    <ListView android:id="@+id/list"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"



aluckdog
浏览 752回答 3
3回答

慕雪6442864

这不是问题,绝对不能保证getView()会被召唤多少次。在您的特殊情况下,您正在使用ListView通过给它一个height=wrap_content..这股力量ListView要在布局时测量出适配器中的几个子节点,可以知道它应该有多大。这就是提供ListView带着convertViews你看传递给getView()甚至在你滚动之前。

开满天机

试着match_parent在layout_height属性的列表视图。它会阻止getView()经常被打电话。

富国沪深

当我将布局_宽度和布局_高度更改为匹配父母(只更改布局_高度没有帮助)。有帮助的注释如果您有嵌套项,请小心。你必须把“最高”的一个改为匹配父母..希望能帮上忙。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java
Android