Почему в определенном диапазоне одно и то же изображение дублируется в режиме просмотра? - PullRequest
0 голосов
/ 24 ноября 2018

Я пытаюсь разработать приложение для Android, которое может загружать изображения из URL в RecyclerView с помощью библиотеки Picasso.Но проблема заключается в том, что после некоторой последовательности «в моем случае после каждых 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.

1 Ответ

0 голосов
/ 24 ноября 2018

Из-за того, что в окне «Управление ОЗУ» в представлении «Recycler», представление «Recycler» пытается загрузить карты из кеша, а из-за кеша в представлении «Recycler» элементы загружаются неправильно.для предотвращения этого вы должны добавить else к вашему if, например:

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