Я пытаюсь создать 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
в LinearLayout
, но я столкнулся с некоторыми проблемами. Если я сохраню высоту в wrap_content
, мой список будет отображаться с правильными записями - Item 1, Item 2, Item 3 и т.д. До пункта 12. Однако, если я изменю высоту на 60dip
, повторы будут повторяться после шестой записи (я получу пункт 1, пункт 2, пункт 3, пункт 4, пункт 5, пункт 6, пункт 1, пункт 2, пункт 3...). Если я продолжаю делать это больше, записи повторяются чаще.
Это фрагмент из ListAdapter
, где я задал записи в списке:
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;
}
Кто-нибудь еще столкнулся с этой проблемой? Я не понимаю, что происходит, поскольку я думал, что это должно быть прямолинейным захватом из массива.
EDIT: включил весь мой метод getView(). Простите уродливый способ получить значки, я еще не понял,
Вы не разместили достаточно кода, но в своем адаптере 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
Из небольшого фрагмента кода я собираюсь угадать, что это связано с повторным использованием представлений, а текст не обновляется. Я не уверен, что не вижу всего кода для ListAdapter.
Посмотрите этот сеанс из Google I/O 2010 для загрузки действительно полезной информации о том, как использовать ListViews (и по расширению адаптеры). Он содержит множество советов и советов о наилучшем способе их использования. Если у вас есть время смотреть видео, если не слайды доступны.
Удачи:)
if-else
. Спасибо!