Метод getView многократного вызова Listview

#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.