Я программно создаю ListView, который делает FILL_PARENT для ширины, и WRAP_CONTENT для высоты, а затем центрирует его в своем родительском представлении.Android ListView Laggy and Child Views Shrinking
элемент управления ListView является полупрозрачным, так что активность за ним видна, так что я использую:
list.setCacheColorHint (0);
list.setBackgroundColor (Color.argb (200, 0, 0, 0));
Кроме этого, это полностью стандартная версия ListView.
два вопроса:
A) ListView чрезвычайно лага при прокрутке (даже только несколько детей). Почему и как я могу его оптимизировать?
B) Всякий раз, когда список прокручивается, некоторые дочерние представления, содержащиеся в ListView, сжимаются и расширяются случайным образом, и это выглядит ужасно. Иногда они застревают, будучи маленькими. Я понятия не имею, почему это делается - я не делаю ничего особенного вне заполнения обычного ListView.
элемент управления ListView использует этот адаптер:
class ActionListAdapter extends BaseAdapter
{
private final ArrayList<MapActionListViewItem> _items = new ArrayList<MapActionListViewItem>();
@Override public final MapActionListViewItem getItem(int position)
{
return _items.get(position);
}
@Override public final long getItemId(int position)
{
return position;
}
@Override public final int getCount()
{
return _items.size();
}
@Override public final View getView(int position, View convertView, ViewGroup parent)
{
return _items.get(position).Row;
}
public final void clear()
{
_items.clear();
notifyDataSetChanged();
}
public final void addItem(MapActionListViewItem item)
{
_items.add(item);
notifyDataSetChanged();
}
public final void removeItem(MapActionListViewItem item)
{
_items.remove(item);
notifyDataSetChanged();
}
public final void refresh()
{
final Iterator<MapActionListViewItem> i = _items.iterator();
while (i.hasNext())
if (!i.next().refresh())
i.remove();
}
}
Объект MapActionListViewItem является классом контейнера, который обновляет дочерние представления:
public abstract class MapActionListViewItem
{
public final ImageView Icon;
public final TextView Title;
public final TextView Subtitle;
public final TextView Info;
public final View Row;
public final int MapAction;
protected final GlobalState State;
public MapActionListViewItem(GlobalState state, int mapActionType)
{
MapAction = mapActionType;
State = state;
Row = state.Inflater.inflate(R.layout.actionlistviewitem, null);
Icon = (ImageView) Row.findViewById(R.id.actionitem_image);
Title = (TextView) Row.findViewById(R.id.actionitem_title);
Subtitle = (TextView) Row.findViewById(R.id.actionitem_subtitle);
Info = (TextView) Row.findViewById(R.id.actionitem_info);
}
public abstract boolean refresh();
}
Я отключил освежающий для устранения неполадок моих вопросов, так что ISN Это важно. Каждый ребенок Строка, содержащаяся в ListView раздувается от actionlistviewitem.xml:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_height="wrap_content" android:orientation="vertical"
android:layout_width="wrap_content">
<LinearLayout android:layout_height="wrap_content"
android:layout_width="fill_parent">
<ImageView android:id="@+id/actionitem_image"
android:scaleType="center" android:layout_height="25dp"
android:layout_width="25dp" />
<TextView android:id="@+id/actionitem_title"
android:textColor="@color/white" android:text="TITLE"
android:textSize="14dp" android:layout_height="wrap_content"
android:layout_gravity="center" android:layout_width="wrap_content" />
</LinearLayout>
<TextView android:layout_height="wrap_content" android:id="@+id/actionitem_subtitle"
android:text="Sub Title" android:textSize="12dp"
android:layout_marginLeft="25dp" android:layout_width="wrap_content" />
<TextView android:layout_height="wrap_content"
android:textSize="10dp" android:text="Information"
android:layout_marginLeft="25dp" android:layout_width="wrap_content"
android:id="@+id/actionitem_info" />
</LinearLayout>
Я стучал голову против этого в течение нескольких дней без успеха. Независимо от того, что я пробовал, представления Child из приведенного выше XML сжимаются случайным образом, прокручиваясь очень безобразным и неожиданным способом и почти бесполезны с задержкой прокрутки на моем DroidX. Любая помощь будет принята с благодарностью.
(разработка в Eclipse, 3.5.2, нацеливание SDK 8 - 2.2)
полупрозрачный фон - дорогостоящие вычисления, а в ListView означает, что вы отключите многие из оптимизаций ListView; вы можете подумать об этом. –