Как вы можете видеть в видео, ListView не прокручивается плавно.ListView с загрузчиком изображений не загружается эффективно
Это как всегда перезагружать изображение из URL.
Что я хочу иметь, это должно выглядеть гладко, так профессионально.
Если изображение недействительно, изображение должно быть невидимым и нулевым.
Я использую библиотеку Universal-Image-Loader.
Вот мой код.
String url = MainActivity.IMAGE_URL + "postid=" + model.get(position).getId();
loader.loadImage(url, new SimpleImageLoadingListener() {
@Override
public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) {
holder.image.setVisibility(View.VISIBLE);
holder.image.setImageBitmap(loadedImage);
}
@Override
public void onLoadingFailed(String imageUri, View view, FailReason failReason) {
holder.image.setVisibility(View.GONE);
holder.image.setImageBitmap(null);
}
@Override
public void onLoadingCancelled(String imageUri, View view) {
holder.image.setVisibility(View.GONE);
holder.image.setImageBitmap(null);
}
});
И вот полный код.
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
View view;
if(convertView == null) {
LayoutInflater inflater = LayoutInflater.from(context);
view = inflater.inflate(R.layout.post_adapter, null);
ViewHolder viewHolder = new ViewHolder();
viewHolder.avatar = (ImageView) view.findViewById(R.id.post_avatar);
viewHolder.title = (TextView) view.findViewById(R.id.post_title);
viewHolder.time = (TextView) view.findViewById(R.id.post_time);
viewHolder.text = (TextView) view.findViewById(R.id.post_text);
viewHolder.image = (ImageView) view.findViewById(R.id.post_image);
viewHolder.likes = (TextView) view.findViewById(R.id.post_likes);
viewHolder.comments = (TextView) view.findViewById(R.id.post_comments);
viewHolder.likeImage = (ImageView) view.findViewById(R.id.like_image);
viewHolder.likeText = (TextView) view.findViewById(R.id.like_text);
viewHolder.shareBtn = view.findViewById(R.id.share_btn);
viewHolder.commentBtn = view.findViewById(R.id.comment_btn);
viewHolder.likeBtn = view.findViewById(R.id.like_btn);
view.setTag(viewHolder);
} else {
view = convertView;
}
final ViewHolder holder = (ViewHolder) view.getTag();
final boolean hasLiked = model.get(position).isHasLiked();
if(hasLiked) {
holder.likeImage.setImageResource(R.drawable.ic_action_like_clicked);
holder.likeText.setText(context.getString(R.string.dislike));
holder.likeText.setTextColor(context.getResources().getColor(R.color.color_clicked));
} else {
ColorStateList textColor = holder.title.getTextColors();
holder.likeImage.setImageResource(R.drawable.ic_action_like);
holder.likeText.setText(context.getString(R.string.like));
holder.likeText.setTextColor(textColor);
}
holder.title.setText(model.get(position).getTitle());
ImageLoader loader = ImageLoader.getInstance();
DisplayImageOptions options = new DisplayImageOptions.Builder()
.showImageForEmptyUri(R.drawable.avatar)
.showImageOnFail(R.drawable.avatar).build();
loader.displayImage(model.get(position).getAvatar(), holder.avatar, options);
String time = MainActivity.getTimeAgo(new Date(model.get(position).getTime() * 1000), context);
holder.time.setText(time);
if(model.get(position).getText().isEmpty()) {
holder.text.setVisibility(View.GONE);
} else {
holder.text.setVisibility(View.VISIBLE);
holder.text.setText(model.get(position).getText());
}
// HERE
String url = MainActivity.IMAGE_URL + "postid=" + model.get(position).getId();
loader.loadImage(url, new SimpleImageLoadingListener() {
@Override
public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) {
holder.image.setVisibility(View.VISIBLE);
holder.image.setImageBitmap(loadedImage);
}
@Override
public void onLoadingFailed(String imageUri, View view, FailReason failReason) {
holder.image.setVisibility(View.GONE);
holder.image.setImageBitmap(null);
}
@Override
public void onLoadingCancelled(String imageUri, View view) {
holder.image.setVisibility(View.GONE);
holder.image.setImageBitmap(null);
}
});
holder.likes.setText(String.valueOf(model.get(position).getLikes()));
String comments = model.get(position).getComments() + " " + context.getString(R.string.comments);
holder.comments.setText(comments);
return view;
}
.config (Bitmap.Config.RGB_565) будет использовать очень меньше памяти и .resizeDimen (R.dimen .d50dp, R.dimen.d50dp) загрузит небольшое изображение из памяти, поэтому потребуется меньше времени и памяти. –
Я изменился на Picasso, но как я могу починить эту ошибку, когда прокручиваю вниз, а затем снова загружает изображение. Как в видео, которое я записал. https://youtu.be/sV57QFAc7FU (новое видео) – enucar
Nevermind исправлено. После того, как я перешел на Picasso, мое приложение этого не заметило. Я очистил свое приложение в задаче и очистил, перестроил проект. Теперь это работает. спасибо – enucar