recyclerview在删除项目后重复其他项目

发布于 2025-01-24 10:21:21 字数 5817 浏览 0 评论 0原文

删除项目后,RecyClerview重复其他项目。 试图清除Arraylist,但我不起作用

,我是新手,因此从Internet获得了一些信息。

同样在火箱项目中删除多次。

请帮助我

有我的代码和壁炉图片:

适配器

public class MovieFavAdapter extends RecyclerView.Adapter<FavViewHolder> {
        private Activity activity;
        private List<MovieDetail> results;
        int id;
        FirebaseAuth auth;
        String uid;
        private ImageView deleteItem;
        DatabaseReference db;
        MovieDetail result;
        FavViewHolder favViewHolder;
        int i;
        Intent intent;
        @Override
        public void setHasStableIds(boolean hasStableIds) {
            super.setHasStableIds(hasStableIds);
        }

        public MovieFavAdapter(Activity activity, List<MovieDetail> results) {
            this.activity = activity;
            this.results = results;
        }

        @NonNull
        @Override
        public FavViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
            View view = LayoutInflater.from(activity.getApplicationContext()).inflate(R.layout.fav_items,parent, false);
            favViewHolder = new FavViewHolder(view);
            return favViewHolder;
        }

        @Override
        public void onBindViewHolder(@NonNull FavViewHolder holder, @SuppressLint("RecyclerView") int position) {
            result = results.get(position);
            auth = FirebaseAuth.getInstance();
            holder.setPosterImageView(activity, result.getPoster_path());
            String title = result.getTitle();
            holder.poster_title_movie.setText(title);
            i = holder.getAdapterPosition();
            if (title != null) {
                holder.poster_title_movie.setVisibility(View.VISIBLE);
                holder.poster_title_movie.setText(title);
            } else {
                holder.poster_title_movie.setVisibility(View.GONE);
            }
            holder.itemView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    id = result.getId();
                    Intent intent = new Intent(view.getContext(), MovieDetailActivity.class);
                    intent.putExtra("id", String.valueOf(id));
                    activity.startActivity(intent);
                    activity.onBackPressed();
                }
            });
           
            holder.imageView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    id = results.get(i).getId();
                    uid = auth.getCurrentUser().getUid();
                    db = FirebaseDatabase.getInstance().getReference();
                    db.child("MovieId").child(uid).child(String.valueOf(id)).removeValue();
                    results.remove(i);
                    notifyItemRemoved(i);
                    notifyItemRangeChanged(i, results.size());
                    Toast.makeText(activity.getApplicationContext(), "Delete "+ i, Toast.LENGTH_SHORT).show();
                }
            });
        }


        @Override
        public int getItemCount() {
            return results.size();
        }
    }

碎片

@Override
    public void onCreate(@Nullable Bundle savedInstanceState) {


        databaseReference = FirebaseDatabase.getInstance().getReference("MovieId");
        results=new ArrayList<>();
        auth = FirebaseAuth.getInstance();
        uid = auth.getUid();
        retrofitService = RetrofitClient.getClient().create(RetrofitService.class);
        if (!results.isEmpty()){
            results.clear();
        }
        super.onCreate(savedInstanceState);
    }

    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        v = inflater.inflate(R.layout.fav_movie_layout, container, false);
        favRecycler = v.findViewById(R.id.fav_movie_list);
        favRecycler.setHasFixedSize(true);
        favRecycler.setItemAnimator(null);
        favRecycler.setLayoutManager(new LinearLayoutManager(getContext()));
        movieFavAdapter = new MovieFavAdapter(getActivity(), results);
        movieFavAdapter.notifyDataSetChanged();
        movieFavAdapter.setHasStableIds(true);
        databaseReference.child(uid).addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot snapshot) {
                for (DataSnapshot dataSnapshot: snapshot.getChildren()){
                    results.clear();
                    Call<MovieDetail> movieDetailCall = retrofitService.getMovieDetailsById(Integer.parseInt(dataSnapshot.getKey()), BuildConfig.Api_Key);
                    movieDetailCall.enqueue(new Callback<MovieDetail>() {
                        @Override
                        public void onResponse(Call<MovieDetail> call, Response<MovieDetail> response) {
                            MovieDetail movieDetail = response.body();
                            results.add(movieDetail);
                            movieFavAdapter.notifyDataSetChanged();
                        }

                        @Override
                        public void onFailure(Call<MovieDetail> call, Throwable t) {

                        }

                    });
                }

            }

            @Override
            public void onCancelled(@NonNull DatabaseError error) {

            }
        });
        favRecycler.setAdapter(movieFavAdapter);
        return v;

    }
}

firebase 在此处输入图像描述

RecyclerView duplicates other items after deleting an item.
Tried to clear ArrayList but it's not working

I'm a newbie so some information got from the internet.

Also in the firebase item deleting multiple times.

please help me

There's my code and firebase picture:

Adapter

public class MovieFavAdapter extends RecyclerView.Adapter<FavViewHolder> {
        private Activity activity;
        private List<MovieDetail> results;
        int id;
        FirebaseAuth auth;
        String uid;
        private ImageView deleteItem;
        DatabaseReference db;
        MovieDetail result;
        FavViewHolder favViewHolder;
        int i;
        Intent intent;
        @Override
        public void setHasStableIds(boolean hasStableIds) {
            super.setHasStableIds(hasStableIds);
        }

        public MovieFavAdapter(Activity activity, List<MovieDetail> results) {
            this.activity = activity;
            this.results = results;
        }

        @NonNull
        @Override
        public FavViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
            View view = LayoutInflater.from(activity.getApplicationContext()).inflate(R.layout.fav_items,parent, false);
            favViewHolder = new FavViewHolder(view);
            return favViewHolder;
        }

        @Override
        public void onBindViewHolder(@NonNull FavViewHolder holder, @SuppressLint("RecyclerView") int position) {
            result = results.get(position);
            auth = FirebaseAuth.getInstance();
            holder.setPosterImageView(activity, result.getPoster_path());
            String title = result.getTitle();
            holder.poster_title_movie.setText(title);
            i = holder.getAdapterPosition();
            if (title != null) {
                holder.poster_title_movie.setVisibility(View.VISIBLE);
                holder.poster_title_movie.setText(title);
            } else {
                holder.poster_title_movie.setVisibility(View.GONE);
            }
            holder.itemView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    id = result.getId();
                    Intent intent = new Intent(view.getContext(), MovieDetailActivity.class);
                    intent.putExtra("id", String.valueOf(id));
                    activity.startActivity(intent);
                    activity.onBackPressed();
                }
            });
           
            holder.imageView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    id = results.get(i).getId();
                    uid = auth.getCurrentUser().getUid();
                    db = FirebaseDatabase.getInstance().getReference();
                    db.child("MovieId").child(uid).child(String.valueOf(id)).removeValue();
                    results.remove(i);
                    notifyItemRemoved(i);
                    notifyItemRangeChanged(i, results.size());
                    Toast.makeText(activity.getApplicationContext(), "Delete "+ i, Toast.LENGTH_SHORT).show();
                }
            });
        }


        @Override
        public int getItemCount() {
            return results.size();
        }
    }

Fragment

@Override
    public void onCreate(@Nullable Bundle savedInstanceState) {


        databaseReference = FirebaseDatabase.getInstance().getReference("MovieId");
        results=new ArrayList<>();
        auth = FirebaseAuth.getInstance();
        uid = auth.getUid();
        retrofitService = RetrofitClient.getClient().create(RetrofitService.class);
        if (!results.isEmpty()){
            results.clear();
        }
        super.onCreate(savedInstanceState);
    }

    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        v = inflater.inflate(R.layout.fav_movie_layout, container, false);
        favRecycler = v.findViewById(R.id.fav_movie_list);
        favRecycler.setHasFixedSize(true);
        favRecycler.setItemAnimator(null);
        favRecycler.setLayoutManager(new LinearLayoutManager(getContext()));
        movieFavAdapter = new MovieFavAdapter(getActivity(), results);
        movieFavAdapter.notifyDataSetChanged();
        movieFavAdapter.setHasStableIds(true);
        databaseReference.child(uid).addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot snapshot) {
                for (DataSnapshot dataSnapshot: snapshot.getChildren()){
                    results.clear();
                    Call<MovieDetail> movieDetailCall = retrofitService.getMovieDetailsById(Integer.parseInt(dataSnapshot.getKey()), BuildConfig.Api_Key);
                    movieDetailCall.enqueue(new Callback<MovieDetail>() {
                        @Override
                        public void onResponse(Call<MovieDetail> call, Response<MovieDetail> response) {
                            MovieDetail movieDetail = response.body();
                            results.add(movieDetail);
                            movieFavAdapter.notifyDataSetChanged();
                        }

                        @Override
                        public void onFailure(Call<MovieDetail> call, Throwable t) {

                        }

                    });
                }

            }

            @Override
            public void onCancelled(@NonNull DatabaseError error) {

            }
        });
        favRecycler.setAdapter(movieFavAdapter);
        return v;

    }
}

Firebase
enter image description here

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文