#android #listview #android-listview #getview
#Android #listview #android-listview #getview
Вопрос:
Метод getView в адаптере просмотра списка вызывает многократный вызов в позиции 0
, поэтому для загрузки этого действия требуется больше времени
, а также каждый раз устанавливать Bitamp в Imageview при вызове getView
я также пытаюсь установить высоту просмотра списка как fillparent, но не решаю свою проблему
Просмотр списка в Xml-файле
<RelativeLayout android:layout_width="match_parent"
android:layout_height="wrap_content" >
<ListView android:id="@ id/lv_order_list"
android:layout_width="match_parent"
android:layout_height="fill_parent"
android:divider="@android:color/transparent"
android:dividerHeight="0dp"
android:listSelector="@android:color/transparent" >
</ListView>
</RelativeLayout>
Метод getView в Listview
@Override
public View getView(final int position, View convertView,
ViewGroup parent) {
myView = convertView;
System.out.println("get view" position);
LayoutInflater inflater = ((Activity) context).getLayoutInflater();
myView = inflater.inflate(layoutResourceId, parent, false);
ImageView img_order = (ImageView) myView
.findViewById(R.id.img_order);
TextView title_of_ink = (TextView) myView
.findViewById(R.id.title_of_ink);
title_of_ink.setText("Text");
picasso.load("url").noFade().into(img_order);
return myView;
}
Комментарии:
1. вы не указали свою проблему.. Также хорошо известно, что Android вызывает getView в позиции 0 несколько раз. Я не уверен, ошибка это или особенность, но это системная вещь.
2. Кто является родителем вашего listview? является ли это линейным, относительным расположением фрейма?
3. Относительный макет является родительским для listview
Ответ №1:
getView
будет вызываться несколько раз во время прокрутки, вот как ListView
работает.
Для повышения производительности вы можете использовать два метода:
1) Просмотр повторного использования, который вы делаете НЕПРАВИЛЬНО
public View getView(int position, View convertView, ViewGroup parent) {
if (convertView == null) {
convertView = mInflater.inflate(R.layout.your_layout, null);
}
TextView text = (TextView) convertView.findViewById(R.id.text);
text.setText("Position " position);
return convertView;
}
2) Используйте шаблон ViewHolder
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder;
if (convertView == null) {
convertView = mInflater.inflate(R.layout.your_layout, null);
holder = new ViewHolder();
holder.text = (TextView) convertView.findViewById(R.id.text);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
holder.text.setText("Position " position);
return convertView;
}
private static class ViewHolder {
public TextView text;
}
3) Асинхронная загрузка изображений
он с заглавной буквы P, и вам не хватает Context
аргумента
Picasso.with(context).load("http://i.imgur.com/DvpvklR.png").into(imageView);
Код заимствован из lucasr.org.