2015-02-11 2 views
0

Я работаю над приложением, где мне нужно показать список пользователей. Список пользователей - это настраиваемый список, который имеет изображение и текстовое представление. Пользовательское изображение будет загружено в это изображение с сервера. Я уже работал с библиотекой picasso, и это очень просто. Я получаю URL-адрес изображения вместе с именем пользователя с сервера с помощью http-запроса. Теперь дело в том, как мне нужно использовать пользовательский список я реализовал пользовательский адаптер и в методе GetView я загрузить изображение с помощьюЛучший способ обработки загрузки изображений в пользовательском списке в android

Picasso.with(MainActivity.this).load("http://i.imgur.com/DvpvklR.png").into(container); 

Но мой Теперь вопрос, когда мне нужно, чтобы показать 30 пользователя в списке, то мне нужно для получения 30 пользовательских изображений по вышеуказанному коду. Я не знаю, является ли это лучшей практикой или другим способом обработки такого списка. Опять же, я не знаю, что этот список может занимать пользовательскую память. Что я могу знать?

+0

Go посмотреть на залп. Это разработанная Google библиотека, которая помогает именно с этим http://developer.android.com/training/volley/request.html – Neil

+0

Всегда используемое Pojo? Попробуйте использовать это. –

+0

Я не использовал Pojo.- Tushar – Asif

ответ

0

Вы можете использовать библиотеку загрузчика Universal Image для отображения изображений в пользовательском адаптере.

Здесь вы можете использовать этот код для отображения картинки.

imageLoader.displayImage(imageUrl, imageView, new ImageLoadingListener() 
     { 
      @Override 
      public void onLoadingStarted(String imageUri, View view) 
      { 
      } 

      @Override 
      public void onLoadingFailed(String imageUri, View view, FailReason failReason) 
      { 
      } 

      @Override 
      public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) 
      { 
       progress.setVisibility(View.GONE); 
      } 

      @Override 
      public void onLoadingCancelled(String imageUri, View view) 
      { 
      } 
     }); 

Здесь вы можете увидеть Android Universal Image Loader

+0

Какой из них лучше использовать универсальный погрузчик или использовать залп? – Asif

0

Пикассо библиотека проста в использовании и реализует кэш, так что ваши ресурсы не были потрачены впустую.

Я использую эту библиотеку в виде списка со многими элементами, и она работает как шарм (так же, как вы это делаете).

Поскольку getView вызывается, когда элемент становится видимым (по мере того, как пользователь прокручивает в основном), будет не так много загрузки изображений одновременно.

Я рекомендую использовать Picasso и внедрять шаблон View holder в ваш адаптер списка (вы улучшите производительность и получите плавные свитки).

--- ОБНОВЛЕНИЕ ------------------------------------------ -----------------

ViewHolder модель краткий пример, основанный в this:

«findViewById» использует цикл для обхода элементов внутри зрения, поэтому при прокрутке в виде списка есть много ссылок на него из «getView». Это может вызвать проблемы с плохими характеристиками в больших списках.

Просмотреть список элементов просмотра Listview, потому что getView получает параметр View. Этот параметр является нулевым в первый раз, когда он используется, но позже используемые представления могут быть переданы этому методу.

Идея View Holder заключается в том, чтобы хранить ссылки на подпункты при создании основного объекта представления, поэтому нет необходимости вызывать findViewById в будущих целях.

Выполните следующие действия:

  1. Реализовать класс для хранения просматривать ссылки:

    статический класс ViewHolderItem { TextView textViewItem; // Добавьте столько элементов, сколько вам нужно: флажки, просмотры изображений, ... }

  2. Реализовать GetView в адаптере таким образом:

    @Override общественное мнение GetView (интермедиат положение, Вид convertView, родительский элемент ViewGroup) { ViewHolderItem viewHolder;

    // First time: the object is created 
    if(convertView==null){ 
        // inflate the layout 
        LayoutInflater inflater = ((Activity) mContext).getLayoutInflater(); 
        convertView = inflater.inflate(layoutResourceId, parent, false); 
    
        // Creates the ViewHolder and stores references to views 
        viewHolder = new ViewHolderItem(); 
        viewHolder.textViewItem = (TextView) convertView.findViewById(R.id.textViewItem); 
    
        // Uses tag to store the holder with the main view. 
        convertView.setTag(viewHolder); 
    } else { 
        // View is beign resused. 
        // Avoids calling findViewById() just use the viewHolder. 
        viewHolder = (ViewHolderItem) convertView.getTag(); 
    } 
    
    // Gets object item. 
    ObjectItem objectItem = getItem(position); 
    
    // assign values (if the object is not null) 
    if(objectItem != null) { 
        // Fill data in layout assigning values to views in the view holder. 
        viewHolder.textViewItem.setText(objectItem.itemName); 
        // Set images, check boxes state, or whatever you have in your layout. 
    } 
    
    // Finally returns the updated view. 
    return convertView; 
    

    }

+0

Спасибо. Я уже использовал пикассо. Можете ли вы помочь мне использовать зрителя для повышения производительности? – Asif

+0

Проверьте два первых шага в ссылке, которую я предоставил: http://www.javacodegeeks.com/2013/09/android-viewholder-pattern-example.html (У меня нет собственной реализации для совместного использования как я используйте библиотеку аннотаций, и это реализует это по-другому) –

+0

Я обновил свой ответ, добавив краткий пример и объяснение. Надеюсь, это поможет. –

Смежные вопросы