首页 > 解决方案 > 删除按下后退按钮上的重复项目

问题描述

在我的应用程序中,我有 ViewPager 包含 3 个片段(主页、个人资料等)

Home Fragment 包含 RecyclerView。当我在片段之间导航时,它按预期工作。

但是,当我将 Home Fragment 导航到任何其他 Activity 时,Home RecyclerView 中的项目重复...

当我再次导航时,它再次重复

这是HomeFragment.java代码

public class Home extends Fragment {

  public final ArrayList<MyActivityModel> mainPosts = new ArrayList<>();
    public String UserID;
    public RecyclerView mainRecyclerView;
    public View v;
    private LinearLayoutManager linearLayoutManager;
    private PostAdapter mAdapter;

  @Override
    public View onCreateView(LayoutInflater layoutInflater, ViewGroup container, Bundle bundle) {
     

        v = layoutInflater.inflate(R.layout.fragment_home, container, false);

        mainRecyclerView = (RecyclerView) v.findViewById(R.id.MainRecyclerView);

        LinearLayoutManager linearLayoutManager = new LinearLayoutManager(getActivity());

        mainRecyclerView.setLayoutFrozen(false);
        mainRecyclerView.setHasFixedSize(true);

        mainRecyclerView.setNestedScrollingEnabled(false);
        mainRecyclerView.setLayoutManager(linearLayoutManager);
       
       
        mAdapter = new PostAdapter(mainPosts);
        mainRecyclerView.setAdapter(mAdapter);


      
        LoadPosts();

        return v;

    }

  /**
     * -----------------TODO: TO RECIEVE (educational level) Of current USER ----------
     * -----------------TODO: to load posts first time...----------------
     */
    public void LoadPosts() {


        Query database = FirebaseDatabase.getInstance().getReference().child("Posts");

        database.addChildEventListener(new ChildEventListener() {
            @Override
            public void onChildAdded(@NonNull DataSnapshot snapshot, @Nullable String previousChildName) {

                if (snapshot.exists()) {

                   
                        MyActivityModel post = snapshot.getValue(MyActivityModel.class);

                         mainPosts.add(0, post);
                        mAdapter.notifyDataSetChanged();

                    } 

                }


            }

            @Override
            public void onChildChanged(@NonNull DataSnapshot snapshot, @Nullable String previousChildName) {
            }

            @Override
            public void onChildRemoved(@NonNull DataSnapshot snapshot) {
            }

            @Override
            public void onChildMoved(@NonNull DataSnapshot snapshot, @Nullable String previousChildName) {
            }

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

        });
     
    }




    @Override
    public void onDestroy() {
        super.onDestroy();
        unbindDrawable(v.findViewById(R.id.homeFragment_all_linear));
        System.gc();
    }

    private void unbindDrawable(View viewById) {

        if (viewById.getBackground() != null) {
            viewById.getBackground().setCallback(null);

        }
        if (viewById instanceof ViewGroup) {
            for (int i = 0; i < ((ViewGroup) viewById).getChildCount(); i++) {
                unbindDrawable(((ViewGroup) viewById).getChildAt(i));
            }
            ((ViewGroup) viewById).removeAllViews();

        }
    }


}

这是带有 Home RecyclerView的PostAdapter 。


public class PostAdapter extends RecyclerView.Adapter<PostAdapter.PostViewHolder> {

    ArrayList<MyActivityModel> mainPostList;

    Context context;
 public PostAdapter(ArrayList<MyActivityModel> mainPostList) {

        this.mainPostList = mainPostList;


    }


        public void setItems(ArrayList<MyActivityModel> modelArrayList) {

        int currentSize = mainPostList.size();
        mainPostList.clear();

        modelArrayList.addAll(modelArrayList);
        notifyItemRangeRemoved(0, currentSize);
        notifyItemRangeInserted(0, modelArrayList.size());


    }

  @NonNull
    @Override
    public PostViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {

        View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.post_item, viewGroup, false);
        context = viewGroup.getContext();
        return new PostViewHolder(view);
    }

  @Override
    public void onBindViewHolder(@NonNull final PostViewHolder holder, int i) {

 // Stop recycling @Todo...
        holder.setIsRecyclable(false);

        MyActivityModel Post = mainPostList.get(i);

        final String Postid = Post.getPostid();
        final String post_Content = Post.getPost_content();   
       

        holder.setPost(Postid, post_Content);
 
}

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


    @Override
    public long getItemId(int position) {
        return position;
    }



 class PostViewHolder extends RecyclerView.ViewHolder {

 public TextView  PostContent;

        public PostViewHolder(@NonNull View itemView) {

            super(itemView);

            mView = itemView;

            PostContent = mView.findViewById(R.id.post_Content);

      
 }

  public void setPost(String postId, String post_content) {

      PostContent.setTect(post_content + "\n" + postId);

}

}


请任何人都可以帮助我如何防止这种重复。

如果您需要任何其他代码,请告诉我

标签: javaandroid-fragmentsarraylistandroid-recyclerviewandroid-adapter

解决方案


推荐阅读