This is my Fragment class
public class PengaduanFragment extends Fragment {
private FragmentPengaduanBinding binding;
private PengaduanAdapter adapter;
private final FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
@Override
public void onResume() {
super.onResume();
checkRole();
}
public View onCreateView(@NonNull LayoutInflater inflater,
ViewGroup container, Bundle savedInstanceState) {
binding = FragmentPengaduanBinding.inflate(inflater, container, false);
return binding.getRoot();
}
//get data from firestore
private void checkRole() {
FirebaseFirestore
.getInstance()
.collection("users")
.document(user.getUid())
.get()
.addOnSuccessListener(new OnSuccessListener<DocumentSnapshot>() {
@SuppressLint("SetTextI18n")
@Override
public void onSuccess(DocumentSnapshot documentSnapshot) {
String role = "" + documentSnapshot.get("role");
if(role.equals("user")) {
binding.title.setText("Pengaduan Terkirim");
binding.keterangan.setText("Pengaduan Terkirim\nKe Admin SIMRS");
} else {
binding.title.setText("Pengaduan Masuk");
binding.keterangan.setVisibility(View.GONE);
//binding.keterangan.setText("Pengaduan Masuk\ndari Pegawai");
}
initRecyclerView(role);
initViewModel(role);
}
});
}
private void initRecyclerView(String role) {
binding.rvPengaduan.setLayoutManager(new LinearLayoutManager(getActivity()));
adapter = new PengaduanAdapter(role, "");
binding.rvPengaduan.setAdapter(adapter);
}
private void initViewModel(String role) {
PengaduanViewModel viewModel = new ViewModelProvider(this).get(PengaduanViewModel.class);
binding.progressBar.setVisibility(View.VISIBLE);
if(role.equals("user")) {
viewModel.setListPengaduanUserByUid(user.getUid());
}
else {
viewModel.setListPengaduanAdminByUid(user.getUid());
}
viewModel.getPengaduan().observe(this, pengaduanModelArrayList -> {
if (pengaduanModelArrayList.size() > 0) {
if(role.equals("user")) {
binding.noDataUser.setVisibility(View.GONE);
} else {
binding.noDataAdmin.setVisibility(View.GONE);
}
adapter.setData(pengaduanModelArrayList);
} else {
if(role.equals("user")) {
binding.noDataUser.setVisibility(View.VISIBLE);
} else {
binding.noDataAdmin.setVisibility(View.VISIBLE);
}
}
binding.progressBar.setVisibility(View.GONE);
});
}
@Override
public void onDestroyView() {
super.onDestroyView();
binding = null;
}
}
This is my adapter
public class PengaduanAdapter extends RecyclerView.Adapter<PengaduanAdapter.ViewHolder> {
private final ArrayList<PengaduanModel> listPengaduan = new ArrayList<>();
String role, page;
public PengaduanAdapter(String role, String page) {
this.role = role;
this.page = page;
}
@SuppressLint("NotifyDataSetChanged")
public void setData(ArrayList<PengaduanModel> items) {
listPengaduan.clear();
listPengaduan.addAll(items);
notifyDataSetChanged();
}
@NonNull
@Override
public PengaduanAdapter.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_pengaduan, parent, false);
return new ViewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull PengaduanAdapter.ViewHolder holder, int position) {
holder.bind(listPengaduan.get(position), role, page, listPengaduan);
}
@Override
public int getItemCount() {
return listPengaduan.size();
}
public class ViewHolder extends RecyclerView.ViewHolder {
TextView name, unit, lastMessage, date;
ImageView image, check, delete;
ConstraintLayout cv;
public ViewHolder(@NonNull View itemView) {
super(itemView);
name = itemView.findViewById(R.id.name);
unit = itemView.findViewById(R.id.unit);
lastMessage = itemView.findViewById(R.id.lastMessage);
date = itemView.findViewById(R.id.date);
image = itemView.findViewById(R.id.image);
check = itemView.findViewById(R.id.imageView);
cv = itemView.findViewById(R.id.cv);
delete = itemView.findViewById(R.id.delete);
}
@SuppressLint({"SetTextI18n", "NotifyDataSetChanged"})
public void bind(PengaduanModel model, String role, String page, ArrayList<PengaduanModel> listPengaduan) {
if(page.equals("dashboard")) {
check.setVisibility(View.VISIBLE);
} else {
delete.setVisibility(View.GONE);
}
if(role.equals("user")){
Glide.with(itemView.getContext())
.load(model.getAdminImage())
.into(image);
name.setText(model.getAdminName());
unit.setText("Unit: " +model.getAdminUnit());
} else {
Glide.with(itemView.getContext())
.load(model.getUserImage())
.into(image);
name.setText(model.getUserName());
unit.setText("Unit: " + model.getUserUnit());
}
lastMessage.setText("Pesan: " + model.getMessage());
date.setText(model.getDate());
cv.setOnClickListener(view -> {
Intent intent = new Intent(itemView.getContext(), MessageActivity.class);
intent.putExtra(MessageActivity.EXTRA_DATA, model);
intent.putExtra(MessageActivity.ROLE, role);
itemView.getContext().startActivity(intent);
});
delete.setOnClickListener(view -> {
new AlertDialog.Builder(itemView.getContext())
.setTitle("Konfirmasi Laporan Selesai")
.setMessage("Anda yakin ingin menyelesaikan laporan ini?")
.setIcon(R.drawable.ic_baseline_warning_24)
.setPositiveButton("SETUJU", (dialogInterface, i) -> {
dialogInterface.dismiss();
ProgressDialog mProgressDialog = new ProgressDialog(itemView.getContext());
mProgressDialog.setMessage("Mohon tunggu hingga proses selesai...");
mProgressDialog.setCanceledOnTouchOutside(false);
mProgressDialog.show();
FirebaseFirestore
.getInstance()
.collection("report")
.document(model.getUid())
.update("status", "finish")
.addOnCompleteListener(task -> {
if(task.isSuccessful()) {
//listPengaduan.remove(listPengaduan.get(getLayoutPosition()));
delete.setColorFilter(Color.argb(255, 0, 255, 0));
notifyDataSetChanged();
mProgressDialog.dismiss();
Toast.makeText(itemView.getContext(), "Berhasil menyelesaikan laporan.", Toast.LENGTH_SHORT).show();
} else {
mProgressDialog.dismiss();
Toast.makeText(itemView.getContext(), "Gagal menyelesaikan laporan, mohon periksa internet anda dan coba lagi nanti.", Toast.LENGTH_SHORT).show();
}
});
})
.setNegativeButton("TIDAK", null)
.show();
});
}
}
}
Please help me how to fix this?