自定义列表适配器重复条目

时间:2010-08-17 06:16:09

标签: android listview listadapter

我正在尝试创建一个ListView,它将填充数组中的条目。

所以这是我的项目布局:

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

    <ImageView android:id="@+id/list_item_image"
        android:layout_height="wrap_content"
        android:padding="2dip" 
        android:layout_gravity="center_vertical|center_horizontal" 
        android:layout_width="50dip"/>  
    <TextView android:id="@+id/list_item" 
        android:layout_height="fill_parent"
        android:textSize="25sp"
        android:layout_width="fill_parent" 
        android:ellipsize="marquee" 
        android:gravity="center_vertical" 
        android:padding="5dip" >
    </TextView>
</LinearLayout>

我尝试更改layout_height的{​​{1}}但我遇到了一些问题。如果我将高度保持在LinearLayout,我的列表会显示正确的条目 - 第1项,第2项,第3项,依此类推,直到第12项。但是,如果我将高度更改为wrap_content ,条目在第六个条目之后重复(我得到第1项,第2项,第3项,第4项,第5项,第6项,第1项,第2项,第3项......)。如果我继续将它放大,则条目会更频繁地重复。

这是我设置列表条目的60dip的片段:

ListAdapter

还有其他人遇到过这个问题吗?我不明白发生了什么,因为我认为它应该直接从阵列中抓取。

编辑:包含了我的整个getView()方法。原谅获取图标的丑陋方式,我还没想出来,

2 个答案:

答案 0 :(得分:6)

您没有发布足够的代码,但在您的Adapter的getView(...)中尝试使用convertView。

public View getView(int position, View convertView, ViewGroup parent){
   if(convertView == null){
      convertView = mInflater.inflate(R.layout.my_listitem_row, parent, false);
   }

   //...fill the TextViews on your layout

   return convertView;
}

获取图标应该像

一样简单
icon.setImageResource(R.drawable.my_icon); //the res/drawable folder has the my_icon.png file

答案 1 :(得分:2)

从一小段代码我猜测它与重用的视图和文本没有更新有关。虽然我没有看到ListAdapter的所有代码,但我不确定。

请查看this session from Google I/O 2010,了解有关如何使用ListView(以及扩展适配器)的大量有用信息。它包含许多关于使用它们的最佳方式的提示和建议。如果您有时间观看video,如果没有,slides可以使用。

祝你好运:)