Элементы просмотра Recycler дублируются каждый раз, когда я открываю свою активность - PullRequest
0 голосов
/ 26 мая 2020

Вот мой класс Adapter java. Я получаю данные из firestore. Каждый раз, когда я открываю свою деятельность, он показывает дубликаты файлов в моей коллекции. Каждый раз, когда я открываю, количество повторяющихся файлов увеличивается.

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);
            }
        }

    }

Ниже представлено мое основное занятие. Я использовал тот же метод в другом упражнении, но для прямой загрузки. Здесь я использовал прослушиватель щелчков по элементам для метода веб-просмотра. поэтому он показывает эту ошибку.

    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();
                    }
                });

 }
}

1 Ответ

0 голосов
/ 26 мая 2020

Да, я не думаю, что проблема в адаптере, скорее всего, в том, как вы извлекаете данные из Firestore.

В вашем случае я предполагаю, что вы хотите прочитать данные один раз, вам следует проверить этот сегмент документации .

Теперь вместо инициализации вашего списка в конструкторе вы можете создать сеттер для поля, который должен вызываться в прослушивателе при успешном завершении.

Не забудьте вызвать метод notifyDatasetChanged() либо в установщике, либо через экземпляр адаптера в вашей активности / фрагменте.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...