[英]In Recycler View with multiple view types items duplicating on scrollup
[英]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.