У меня возникла проблема с заполнением ImageView
в моем ListView
.
Проблема в том, что все изображения заполняются в одном и том же месте (в представлении изображения самого нижнего списка). Я вижу, как изображение загружается быстро, пока они заполняются.Все изображения загружаются в том же месте в ListView
public class TheaterListAdapter extends ArrayAdapter<ConstantsTheaterList> implements IResult {
private ViewHolder viewHolder;
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if (convertView==null){
convertView = LayoutInflater.from(mContext).inflate(R.layout.fragment_theater_list_item, parent, false);
viewHolder = new ViewHolder();
viewHolder.imageView = (ImageView) convertView.findViewById(R.id.theater_list_item_image);
viewHolder.textViewLatitude = (TextView) convertView.findViewById(R.id.theater_list_item_latitude);
viewHolder.textViewLongitude = (TextView) convertView.findViewById(R.id.theater_list_item_longitude);
viewHolder.textViewVicinity = (TextView) convertView.findViewById(R.id.theater_list_item_vicinity);
convertView.setTag(viewHolder);
} else {
viewHolder = (ViewHolder) convertView.getTag();
}
//Picasso.with(getContext()).load(uri.toString()).into(mImageView); [WORKS FINE]
// Using Volley to fetch image from the web.
new VolleyService(mContext, this).volleyImageRequest(uri.toString(), 100, 100);
String latitude = getItem(position).latitude;
String longitude = getItem(position).longitude;
String vicinity = getItem(position).vicinity;
viewHolder.textViewLatitude.setText(latitude);
viewHolder.textViewLongitude.setText(longitude);
viewHolder.textViewVicinity.setText(vicinity);
return convertView;
}
//These are the callbacks that I receive in my Volley implementation. Now, I fill the bitmap once they are available.
@Override
public void notifySuccess(Object response) {
Bitmap bitmap = (Bitmap) response;
viewHolder.imageView.setImageDrawable(bitmap);
}
@Override
public void nofifyError(Object volleyError) {
Log.e(TAG, (String)volleyError);
}
private static class ViewHolder{
ImageView imageView;
TextView textViewLatitude;
TextView textViewLongitude;
TextView textViewVicinity;
}
}
Я считаю, что это должно быть из-за того, что виды переработаны.
Однако все работает нормально, когда я использую пикассо.
Как исправить то же самое?
«Проблема в том, что все изображения заполняются в одном месте» - это потому, что вы не заполняете изображение в правильную «ViewHolder». Вместо использования «ViewHolder», связанного с запросом, вы используете любое «ViewHolder», находящееся в поле «viewHolder», которое будет тем, что вы недавно встретили «ViewHolder». Вам нужно сделать лучшую работу по связыванию запроса Volley с соответствующим «ImageView». Лично я просто использую Пикассо. – CommonsWare
@CommonsWare Пожалуйста, ответьте подробно сэр.Я не получаю должным образом. –
@SumitJha в методе getView, вы используете залп для загрузки изображений асинхронно. К тому времени, когда волейбол загружает изображение, изменяется местоположение, в котором отображается указатель. Чтобы решить эту проблему, вы можете использовать библиотеки загрузки изображений, использовать recyclerview или использовать анонимный класс при создании сервиса волейбола. –