为什么在特定范围内相同的图像在回收视图中重复



我正在尝试开发android应用程序,它可以在Picasso库的帮助下将图像从url加载到RecyclerView。但问题来了,在一个序列之后,"在我的情况下,每6个图像之后",相同的图像在回收视图中重复。我添加了一些代码

@Override
public int getItemCount() {
return data.length;
}
@Override
public long getItemId(int position) {
return position;
}

在我的适配器中,但这对我不起作用。下面是我的醋栗适配器代码,请帮助我找到解决方案。

public class MyAdapter extends RecyclerView.Adapter<MyAdapter.MyViewHolder> {
private Context context;
private Img[] data;
public MyAdapter(Context context, Img[] data) {
this.context = context;
this.data = data;
}
@Override
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
LayoutInflater inflater = LayoutInflater.from(parent.getContext());
View view = inflater.inflate(R.layout.image_row, parent, false);
MyViewHolder holder = new MyViewHolder(view);
return holder;
}
@Override
public void onBindViewHolder(final MyViewHolder holder, int position) {
final Img user = data[position];
final String imageStr = user.getImgurl();
String taKey = loadTaluka();
final String id = user.getImgId().toString();
if (user.getTaluka().equals(taKey)) {
float date = Float.parseFloat(user.getDateTime());
float lastDayDate = Float.parseFloat(dispDate()) - 1;
if (date >= lastDayDate) {
Picasso.with(holder.myImg.getContext()).load(imageStr).placeholder(R.drawable.loading_1).networkPolicy(NetworkPolicy.OFFLINE).into(holder.myImg, new Callback() {
@Override
public void onSuccess() {
}
@Override
public void onError() {
Picasso.with(holder.myImg.getContext()).load(imageStr).placeholder(R.drawable.loading_1).into(holder.myImg);
}
});

}
holder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(context, LoadImg.class);
intent.putExtra("url", imageStr);
intent.putExtra("id", id);
context.startActivity(intent);
}
});
}
}
@Override
public int getItemCount() {
return data.length;
}
@Override
public long getItemId(int position) {
return position;
}

/*
@Override
public int getItemViewType(int position) {
return position;
}*/
public class MyViewHolder extends RecyclerView.ViewHolder {
TextView userTitle;
TextView age;
TextView country;
TextView url;
public ImageView myImg;
public MyViewHolder(View itemView) {
super(itemView);
myImg = (ImageView) itemView.findViewById(R.id.postImg);
}
}

//Extras

private String loadTaluka() {
SharedPreferences sf = context.getSharedPreferences("Taluka", MODE_PRIVATE);
return sf.getString("taluka", "a");
}
//Image Viewholder Adapter End
private String dispDate() {
Date c = Calendar.getInstance().getTime();
@SuppressLint("SimpleDateFormat") SimpleDateFormat day = new SimpleDateFormat("dd");
String dayFinal = day.format(c);
@SuppressLint("SimpleDateFormat") SimpleDateFormat month = new SimpleDateFormat("MM");
String monthFinal = month.format(c);
@SuppressLint("SimpleDateFormat") SimpleDateFormat year = new SimpleDateFormat("yyyy");
String yearFinal = year.format(c);
@SuppressLint("SimpleDateFormat") SimpleDateFormat hour = new SimpleDateFormat("HH");
String hourFinal = hour.format(c);
String finalDate = Integer.toString(Integer.parseInt(dayFinal) + Integer.parseInt(monthFinal) + Integer.parseInt(yearFinal)) + "." + hourFinal;
return finalDate;
}

}
-Thankyou.

由于Recycler视图的RAM管理,回收器视图尝试从缓存加载卡,并且由于回收器视图的缓存,项目加载不正确。为了防止这种情况,您必须在if中添加一个else,如下所示:

if (date >= lastDayDate)
{
//Do Your Code
}
else
{
//The Default Item View Settings Here...
}

最新更新