Есть RecyclerView с публикациями (в вью этих публикаций есть ImageView). Например загрузил из инета 100 публикаций и для каждой с помощью Picasso библоиотеки загружаю картинки в ImageView.
Picasso.with(context).load(url).placeholder(placeholderImage).error(errorImage).into(ImageView);
Так вот проблема такая что в первых 7-10 публикаций загружаеться изоброжения а остальные стоят также placeholderImage. Есть догатка что это изза того что если в кеш RecyclerView уходит еще не загруженная ImageView то он так и остаеться placeholderImage. Но не знаю изза чего точно и как решить?
Вота код адаптера:
public class RecAdapter extends RecyclerView.Adapter<RecAdapter.ViewHolder> {
private ArrayList<Data_Publication> data;
private LayoutInflater inflater;
private Context context;
private Callback callback;
public RecAdapter(Context context , ArrayList<Data_Publication> data_list , Callback callback){
this.context = context;
this.data = data_list;
this.inflater = LayoutInflater.from(context);
this.callback = callback;
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = inflater.inflate(R.layout.publication, parent , false);
return new ViewHolder(view);
}
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
Data_Publication pub = data.get(position);
holder.setName(pub.getProduct_name());
holder.setPrice(pub.getProduct_price());
holder.setLocation(pub.getProduct_locaton());
holder.setClicker(pub.getProduct_id() , pub.getProduct_name());
holder.loadImage(pub.getPhotoStroge().concat(pub.getImage_url()));
}
@Override
public int getItemCount() {
return data.size();
}
public class ViewHolder extends RecyclerView.ViewHolder{
final private TextView name;
final private TextView price;
final private TextView location;
final private ImageView image;
final private LinearLayout content;
final private LinearLayout main;
private ViewHolder(View view) {
super(view);
this.name = (TextView) view.findViewById(R.id.pub_name);
this.price = (TextView) view.findViewById(R.id.pub_price);
this.location = (TextView) view.findViewById(R.id.pub_location);
this.image = (ImageView) view.findViewById(R.id.pub_image);
this.content = (LinearLayout) view.findViewById(R.id.pub_content);
this.main = (LinearLayout) view.findViewById(R.id.pub_main);
}
public void setName(String name) {
this.name.setText(name);
}
public void setPrice(String price) {
this.price.setText(price);
}
public void setLocation(String location){
this.location.setText(location);
}
public void loadImage(String url){
Picasso.with(context).load(url).placeholder(R.drawable.placeholder).error(R.drawable.error_ph).into(this.image);
}
public void setClicker(final String id , final String name){
final Animation anim = AnimationUtils.loadAnimation(context, R.anim.move_left);
content.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
main.startAnimation(anim);
callback.operation(id , name);
}
});
}
}
}
Редактировал здесь, так что возможно будут ошибки
Если проблема только в загрузке картинки, то попробуйте так
public class RecAdapter extends RecyclerView.Adapter<RecAdapter.ViewHolder> {
private ArrayList<Data_Publication> data;
private LayoutInflater inflater;
private Context context;
private Callback callback;
public RecAdapter(Context context , ArrayList<Data_Publication> data_list , Callback callback){
this.context = context;
this.data = data_list;
this.inflater = LayoutInflater.from(context);
this.callback = callback;
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
сontext = parent.getContext(); //Подставляем context
View view = inflater.inflate(R.layout.publication, parent , false);
return new ViewHolder(view);
}
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
Data_Publication pub = data.get(position);
holder.setName(pub.getProduct_name());
holder.setPrice(pub.getProduct_price());
holder.setLocation(pub.getProduct_locaton());
holder.setClicker(pub.getProduct_id() , pub.getProduct_name());
//holder.loadImage(pub.getPhotoStroge().concat(pub.getImage_url()));
Picasso.with(context)
.load(pub.getImage_url())
//Всякие ваши плюшки
.into(holder.image);
}
@Override
public int getItemCount() {
return data.size();
}
public class ViewHolder extends RecyclerView.ViewHolder{
final private TextView name;
final private TextView price;
final private TextView location;
final private ImageView image;
final private LinearLayout content;
final private LinearLayout main;
private ViewHolder(View view) {
super(view);
this.name = (TextView) view.findViewById(R.id.pub_name);
this.price = (TextView) view.findViewById(R.id.pub_price);
this.location = (TextView) view.findViewById(R.id.pub_location);
//Не уверен, нужен ли здесь this
// но я делаю так
image = (ImageView) view.findViewById(R.id.pub_image);
this.content = (LinearLayout) view.findViewById(R.id.pub_content);
this.main = (LinearLayout) view.findViewById(R.id.pub_main);
}
public void setName(String name) {
this.name.setText(name);
}
public void setPrice(String price) {
this.price.setText(price);
}
public void setLocation(String location){
this.location.setText(location);
}
// Обработку тапа тоже бы перенес в onBindViewHolder!
public void setClicker(final String id , final String name){
final Animation anim = AnimationUtils.loadAnimation(context, R.anim.move_left);
content.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
main.startAnimation(anim);
callback.operation(id , name);
}
});
}
}
}
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Есть метод set() который задает значение enum - STARTEDКак сделать так, чтобы через определенное время duration значение enum задалось как FINISHED
ЗдраствуйтеМне нужно дастать Текущею дату и сравнить с датой сохраненой например в sharedPreferences
Всем приветМожно ли как то сохранить информацию так чтобы оно имелось даже после того как приложения будет удалено и заново установлено?...