簡體   English   中英

每次打開我的活動時,回收商都會查看重復的項目

[英]Recycler view items duplicating everytime i m opening my Activity

這是我的適配器 java class。 我正在從 Firestore 中檢索數據。 每次我打開我的活動時,它都會顯示 mycollection 中的文件副本。 每次我打開時,重復的文件都會增加。

public class AccountsAdapter extends RecyclerView.Adapter<AccountsAdapter.Accountsviewholder> {

        private List<Accountsmodel> list;
        private Context context;
        private ItemClickListener itemClickListener;

        public AccountsAdapter(List<Accountsmodel> list, Context context, ItemClickListener itemClickListener) {
            this.list=list;
            this.context=context;
            this.itemClickListener=itemClickListener;
        }



        @NonNull
        @Override
        public Accountsviewholder onCreateViewHolder(@NonNull ViewGroup parent, int i) {
            LayoutInflater layoutInflater = LayoutInflater.from(context);
            View view = layoutInflater.inflate(R.layout.acc_pdf_item,null,false);
            return new Accountsviewholder(view);
        }

        @Override
        public void onBindViewHolder(@NonNull final Accountsviewholder accountsviewholder, final int position) {
            accountsviewholder.aName.setText(list.get(position).getName());

        }

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

        }

        public class Accountsviewholder extends RecyclerView.ViewHolder implements View.OnClickListener {
            private TextView aName;
            private ImageView imageView;

            public Accountsviewholder(View itemView) {
                super(itemView);
                aName = itemView.findViewById(R.id.aTV);
                imageView = itemView.findViewById(R.id.aIV);
                imageView.setOnClickListener(this);
            }

            @Override
            public void onClick(View v) {
                itemClickListener.onClick(v,getAdapterPosition(),false);
            }
        }

    }

以下是我的主要活動。 我在另一個活動中使用了相同的方法,但用於直接下載。 在這里,我使用了 web 視圖方法的項目單擊偵聽器。 所以它顯示了這個錯誤。

    FirebaseFirestore accdb;
    RecyclerView accRecyclerView;
    public static List<Accountsmodel> list = new ArrayList<>();
    AccountsAdapter accountsAdapter;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_accounts);


        accdb=FirebaseFirestore.getInstance();
        accRecyclerView=findViewById(R.id.arecyclerdownloads);
        accRecyclerView.setHasFixedSize(true);
        accRecyclerView.setLayoutManager(new LinearLayoutManager(this));


        final ItemClickListener itemClickListener = new ItemClickListener() {
            @Override
            public void onClick(View view, int position, boolean isLongClick) {
                Intent intent = new Intent(Accounts_Activity.this, PDFActivity.class);
                //intent.putExtra("url",list.get(position).getLink());
                intent.putExtra("position",position);
                startActivity(intent);
            }
        };



        accdb.collection("Accounts").get().addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
            @Override
            public void onComplete(@NonNull Task<QuerySnapshot> task) {
                for(DocumentSnapshot documentSnapshot: task.getResult()){

                    Accountsmodel accountsmodel= new Accountsmodel(documentSnapshot.getString("name")
                            ,documentSnapshot.getString("link"),documentSnapshot.getString("fileextension"),documentSnapshot.getString("uploaddate"));
                    list.add(accountsmodel);
                }

                accountsAdapter = new AccountsAdapter(list,Accounts_Activity.this,itemClickListener);
                accRecyclerView.setAdapter(accountsAdapter);
            }
        })

                .addOnFailureListener(new OnFailureListener() {
                    @Override
                    public void onFailure(@NonNull Exception e) {
                        Toast.makeText(Accounts_Activity.this,"Error",  Toast.LENGTH_SHORT).show();
                    }
                });

 }
}

是的,我認為問題不在於適配器,可能在於您如何從 Firestore 檢索數據。

在您的情況下,我假設您想讀取一次數據,您應該查看這部分文檔

現在,您可以為該字段創建一個設置器,而不是在構造函數中初始化您的列表,該設置器應該在成功監聽器中調用。

不要忘記在設置器中或通過活動/片段中的適配器實例調用notifyDatasetChanged()方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM