Как я могу загрузить изображения в пользовательский базовый adapeter с помощью URL? - PullRequest
2 голосов
/ 20 февраля 2012

Я получаю изображения из фонового процесса, используя url. Для отображения изображений я использовал BaseAdapter для отображения всех изображений в списке. Я добавил BaseAdapter в свой listView.

Я могу загружать изображенияна заднем плане с помощью класса AsyncTask этот класс может возвращать растровые изображения.

Я реализовал класс адаптера MyCustome следующим образом.

public class CustomeAdapter extends BaseAdapter {
 private static ArrayList<Message> searchArrayList;

 private LayoutInflater mInflater;

 public CustomeAdapter(Context context, ArrayList<Message> results) {
  searchArrayList = results;
  mInflater = LayoutInflater.from(context);




 }

 public int getCount() {
  return searchArrayList.size();
 }

 public Object getItem(int position) {
  return searchArrayList.get(position);
 }

 public long getItemId(int position) {
  return position;
 }

 public View getView(int position, View convertView, ViewGroup parent) {
  ViewHolder holder;
  if (convertView == null) {
   convertView = mInflater.inflate(R.layout.list, null);
   holder = new ViewHolder();
   holder.personName = (TextView) convertView.findViewById(R.id.usrName);
   holder.message = (TextView) convertView.findViewById(R.id.msgText);
   holder.imgPerson = (ImageView) convertView.findViewById(R.id.personImg);
   holder.msgImg = (ImageView) convertView.findViewById(R.id.msgImg);

   convertView.setTag(holder);
  } else {
   holder = (ViewHolder) convertView.getTag();
  }

  holder.personName.setText(searchArrayList.get(position).getShoutUserFirstName());
  holder.message.setText(searchArrayList.get(position).getShoutMessageText());
  holder.msgImg.setImageResource(R.drawable.smile);

  try{

  new DownloadImageTask( holder.imgPerson).execute("http://www.bwappstore.com/WebApps/ShoutImage/Image.ashx?UserID="+searchArrayList.get(position).getShoutUserID());

  }
  catch (RejectedExecutionException  e) {
    e.printStackTrace();
}
  return convertView;
 }

 static class ViewHolder {
  TextView personName;
  TextView message;
 ImageView imgPerson;
 ImageView msgImg;

 }


 private class DownloadImageTask extends AsyncTask<String, Void, Bitmap> {
        ImageView bmImage;

        public DownloadImageTask(ImageView bmImage) {
            this.bmImage = bmImage;
        }
        protected Bitmap doInBackground(String... urls) {
            Bitmap bm = null;
            try {
                URL aURL = new URL(urls[0]);
                URLConnection conn = aURL.openConnection();
                conn.connect();
                InputStream is = conn.getInputStream();
                BufferedInputStream bis = new BufferedInputStream(is);
                bm = BitmapFactory.decodeStream(bis);
                bis.close();
                is.close();
           } 
            catch (IOException e) {
               Log.e("", "Error getting bitmap", e);
           }
           return bm;
        }

        protected void onPostExecute(Bitmap result) {
            bmImage.setImageBitmap(result);
        }
}

}

из реализации я могу загрузить изображения, и я могупоказать в виде списка, но изображения меняются, когда я прокручиваю, все они не фиксируются. Они загружаются снова и снова и перезагружаются на изображение, но не загружают изображения связанных сообщений, если загружено одно изображение, то оно никогда не загрузится снова. Через некоторое время толькоодно изображение показывается в списке

как я могу загрузить одно изображение за один раз, а затем показать в списке?пожалуйста, любое тело, помогите мне

Ответы [ 2 ]

1 голос
/ 20 февраля 2012

Проблема в вашей логике.

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

Так что, если ваша активность ListActivity , попробуйте выполнить свои задачи в методе onStart. Тогда этот вопрос не будет замечен.

1 голос
/ 20 февраля 2012

Вот хорошая библиотека , которая может вам помочь. Автор рассказал, что боролся с утечками памяти и производительностью. Посмотрите на эту библиотеку для начала.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...