Zarah Zarah - 1 year ago 51
Android Question

Custom list adapter repeats entries

I am trying to create a ListView that will be populated with the entries from an array.

So this is my item layout:

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


I tried changing the
layout_height
of the
LinearLayout
but I ran into some problems. If I keep the height at
wrap_content
, my list is displayed with the correct entries -- Item 1, Item 2, Item 3, and so on until Item 12. However if I change the height to
60dip
, the entries repeat after the sixth entry (I get Item 1, Item 2, Item 3, Item 4, Item 5, Item 6, Item 1, Item 2, Item 3...). If I keep on making it larger, the entries repeat more frequently.

This is a snippet from the
ListAdapter
where I set the list entries:

public View getView(int position, View convertView, ViewGroup parent) {

LinearLayout layout;

if (convertView == null){
layout = (LinearLayout) LayoutInflater.from(mContext).inflate(R.layout.items_list_item, parent, false);

TextView title = (TextView) layout.findViewById(R.id.list_item);
title.setText(menuItems[position]);

ImageView icon = (ImageView) layout.findViewById(R.id.list_item_image);
int logo = getResources().getIdentifier(menuIcons[position], "drawable", getPackageName());
icon.setImageResource(logo);

} else {
layout = (LinearLayout) convertView;
}
return layout;
}


Anybody else encountered this problem? I do not understand what is going on since I thought it should be straight-forward grabbing from the array.

EDIT: included the whole of my getView() method. Pardon the ugly way of getting the icons, I haven't figured it out yet,

Answer Source

You didn't post enough code, but in your Adapter's getView(...) try to make use of the 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;
}

Fetching the icons should be as easy as

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