'Firestore Recyclerview item doesn't update when doing add, update, delete data
I have a problem when doing add, update, and delete with my firestore recyclerview. The problem is my recyclerview item updating automatically when doing add, update, and delete. But when I open my firestore , my data already updating. I already added notifydatasetchange method but still, can't solve my problem. Here is my adapter code
public class SMPAdapter extends RecyclerView.Adapter<SMPAdapter.MyViewHolder> {
private List<SMPModel> smpModelList;
private Fragment fragment;
private FirebaseStorage firebaseStorage;
private FirebaseFirestore firebaseFirestore;
public SMPAdapter(List<SMPModel> smpModelList, Fragment fragment) {
this.smpModelList = smpModelList;
this.fragment = fragment;
}
@NonNull
@Override
public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
LayoutInflater layoutInflater = LayoutInflater.from(parent.getContext());
View view = layoutInflater.inflate(R.layout.smp_item, parent, false);
firebaseStorage = FirebaseStorage.getInstance();
firebaseFirestore = FirebaseFirestore.getInstance();
return new MyViewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull MyViewHolder myViewHolder, int position) {
final SMPModel smpModel = smpModelList.get(position);
final String logoURL = smpModel.getLogoURL();
if (logoURL != null) {
Picasso.get().load(logoURL).placeholder(R.drawable.logo_progress_bar).into(myViewHolder.imageViewLogoItem);
} else {
myViewHolder.imageViewLogoItem.setImageResource(R.drawable.icon_tanpa_gambar);
}
myViewHolder.textViewNamaSMPItem.setText(smpModel.getNamaSMP());
myViewHolder.textViewAlamatItem.setText(smpModel.getAlamat());
myViewHolder.cardViewOptionItem.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
PopupMenu popupMenu = new PopupMenu(fragment.getActivity(), myViewHolder.cardViewOptionItem);
popupMenu.inflate(R.menu.option_menu);
popupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem menuItem) {
switch (menuItem.getItemId()) {
// Menampilkan menu edit
case R.id.optionMenuEdit:
// Berpindah ke EditDataActivity dan meneruskan data
Intent intentEditData = new Intent(fragment.getActivity(), EditDataActivity.class);
intentEditData.putExtra("id", smpModel.getId());
intentEditData.putExtra("logoURL", smpModel.getLogoURL());
intentEditData.putExtra("namaSMP", smpModel.getNamaSMP());
intentEditData.putExtra("alamat", smpModel.getAlamat());
intentEditData.putExtra("kecamatan", smpModel.getKecamatan());
intentEditData.putExtra("status", smpModel.getStatus());
intentEditData.putExtra("latitude", smpModel.getLatitude().toString());
intentEditData.putExtra("longitude", smpModel.getLongitude().toString());
fragment.startActivity(intentEditData);
break;
// Menampilkan menu hapus
case R.id.optionMenuHapus:
// Menampilkan pesan "Yakin ingin menghapus?"
AlertDialog.Builder builder = new AlertDialog.Builder(fragment.getActivity());
builder.setMessage("Yakin ingin menghapus?");
builder.setCancelable(true);
builder.setPositiveButton("Ya", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
Toast.makeText(fragment.getActivity(), "Data telah dihapus!", Toast.LENGTH_SHORT).show();
firebaseFirestore.collection("SMP").document(smpModel.getId()).delete();
if (smpModel.getLogoURL() != null) {
firebaseStorage.getReferenceFromUrl(smpModel.getLogoURL()).delete();
}
// Menghapus item pada RecyclerView
smpModelList.remove(myViewHolder.getAdapterPosition());
notifyItemRemoved(myViewHolder.getAdapterPosition());
notifyItemChanged(myViewHolder.getAdapterPosition(), smpModelList.size());
dialogInterface.cancel();
}
});
builder.setNegativeButton("Tidak", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
dialogInterface.cancel();
}
});
AlertDialog alertDialog = builder.create();
alertDialog.show();
break;
}
return false;
}
});
popupMenu.show();
}
});
}
and below is my data_fragment
@Override
public int getItemCount() {
// Memeriksa jumlah data pada variabel smpModelList
return smpModelList.size();
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_data, container, false);
// Inisialisasi variabel
textViewDataJumlahData = view.findViewById(R.id.textViewDataJumlahData);
searchViewData = view.findViewById(R.id.searchViewData);
recyclerViewSMP = view.findViewById(R.id.recyclerViewSMP);
firebaseFirestore = FirebaseFirestore.getInstance();
smpModelArrayList = new ArrayList<>();
smpAdapter = new SMPAdapter(smpModelArrayList, DataFragment.this);
LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this.getActivity(), LinearLayoutManager.VERTICAL, false);
recyclerViewSMP.setLayoutManager(linearLayoutManager);
recyclerViewSMP.setAdapter(smpAdapter);
firebaseFirestore.collection("SMP").get().addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
@SuppressLint("NotifyDataSetChanged")
@Override
public void onComplete(@NonNull Task<QuerySnapshot> task) {
smpModelArrayList.clear();
if (task.isSuccessful()) {
int size = task.getResult().size();
String jumlahData = Long.toString(size);
textViewDataJumlahData.setText(jumlahData);
for (DocumentSnapshot documentSnapshot : task.getResult()) {
SMPModel smpModel = documentSnapshot.toObject(SMPModel.class);
smpModel.setId(documentSnapshot.getId());
smpModelArrayList.add(smpModel);
}
smpAdapter.notifyDataSetChanged();
}
else {
Toast.makeText(getActivity(), "Gagal mengambil data!", Toast.LENGTH_SHORT).show();
}
}
});
if (searchViewData != null) {
searchViewData.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
@Override
public boolean onQueryTextSubmit(String s) {
return false;
}
@Override
public boolean onQueryTextChange(String s) {
ArrayList<SMPModel> searchSMPModelArrayList = new ArrayList<>();
for (SMPModel smpModel : smpModelArrayList) {
if (smpModel.getNamaSMP().toLowerCase().contains(s.toLowerCase())) {
searchSMPModelArrayList.add(smpModel);
}
}
SMPAdapter smpAdapter = new SMPAdapter(searchSMPModelArrayList, DataFragment.this);
recyclerViewSMP.setAdapter(smpAdapter);
return true;
}
});
}
return view;
}
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
setHasOptionsMenu(true);
super.onCreate(savedInstanceState);
}
@Override
public void onCreateOptionsMenu(@NonNull Menu menu, @NonNull MenuInflater inflater) {
inflater.inflate(R.menu.tambah_data_menu, menu);
super.onCreateOptionsMenu(menu, inflater);
}
@Override
public boolean onOptionsItemSelected(@NonNull MenuItem item) {
int id = item.getItemId();
if (id == R.id.menuTambahData) {
Intent intent = new Intent(getActivity(), TambahDataActivity.class);
startActivity(intent);
searchViewData.clearFocus();
}
return super.onOptionsItemSelected(item);
}
}
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
Solution | Source |
---|