Я работаю над приложением, в котором я использовал режим ресайклера для отображения данных из firebase. Когда пользователь выходит из системы, элементы в представлении ресайклера не уничтожаются. При входе в систему другого пользователя он / она может видеть предыдущие данные пользователя.
Как очистить представление ресайклера, когда пользователь нажимает кнопку выхода. Я пытался очистить все данные из приложения, но оно закрывает приложение, и пользователю необходимо повторно щелкнуть приложение.
мой класс адаптера.
public class UserHistoryViewAdapter extends RecyclerView.Adapter<UserHistoryViewAdapter.UserHistoryViewHolder>{
private List<UserHistoryModel> userHistoryModels;
private Dialog UserHistoryPopUp;
private TextView bookingid_pop_up,check_in_date_time_pop_up,room_no, floor_no ,room_type;
private Button close_btn;
public void setUserHistoryModels(List<UserHistoryModel> userHistoryModels) {
this.userHistoryModels = userHistoryModels;
}
@NonNull
@Override
public UserHistoryViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.user_history,parent,false);
UserHistoryPopUp = new Dialog(view.getContext());
UserHistoryPopUp.setContentView(R.layout.user_history_pop_up);
bookingid_pop_up = UserHistoryPopUp.findViewById(R.id.BookingId);
check_in_date_time_pop_up = UserHistoryPopUp.findViewById(R.id.check_in_date_time_pop_up);
room_no = UserHistoryPopUp.findViewById(R.id.Room_no_pop_up);
floor_no = UserHistoryPopUp.findViewById(R.id.Floor_no_pop_up);
room_type = UserHistoryPopUp.findViewById(R.id.Room_Type_pop_up);
close_btn = UserHistoryPopUp.findViewById(R.id.Close_btn);
return new UserHistoryViewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull UserHistoryViewHolder holder, final int position) {
final String bookingid = userHistoryModels.get(position).getBookingId();
final Timestamp check_in_d_t = userHistoryModels.get(position).getCheck_in_date_time();
final SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yy HH:mm:ss");
holder.bookingid.setText(bookingid);
holder.showdetails.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
bookingid_pop_up.setText(bookingid);
check_in_date_time_pop_up.setText(sdf.format(check_in_d_t.toDate()));
room_no.setText(String.valueOf(userHistoryModels.get(position).getRoomNo()));
floor_no.setText(String.valueOf(userHistoryModels.get(position).getFloorNo()));
room_type.setText(userHistoryModels.get(position).getRoomType());
UserHistoryPopUp.show();
close_btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
UserHistoryPopUp.dismiss();
}
});
}
});
}
@Override
public int getItemCount() {
if(userHistoryModels==null){
return 0;
}
else {
return userHistoryModels.size();}
}
public class UserHistoryViewHolder extends RecyclerView.ViewHolder {
private TextView bookingid;
private Button showdetails;
public UserHistoryViewHolder(@NonNull View itemView) {
super(itemView);
bookingid = itemView.findViewById(R.id.Booking_id_textview);
showdetails = itemView.findViewById(R.id.Show_booking_details);
}
}
}
Вот мой класс модели просмотра:
public class UserHistoryViewModel extends ViewModel implements FirebaseRespositary.OnFirestoreTaskCompleted {
private MutableLiveData<List<UserHistoryModel>> UserHistoryData = new MutableLiveData<List<UserHistoryModel>>();
private MutableLiveData<Integer> size1 = new MutableLiveData<>();
public UserHistoryViewModel(){
}
public LiveData<Integer> getSize1(String emailId) {
firebaseRespositary.getSize(emailId);
return size1;
}
public LiveData<List<UserHistoryModel>> getUserHistoryData(String emaild) {
firebaseRespositary.getData(emaild);
return UserHistoryData;
}
private FirebaseRespositary firebaseRespositary = new FirebaseRespositary(this);
@Override
public void UserCheckedInDetails(List<UserHistoryModel> userHistoryViewModels) {
UserHistoryData.setValue(userHistoryViewModels);
}
@Override
public void FirestoreError(Exception e) {
}
@Override
public void UserHistorySize(int size) {
size1.setValue(size);
}
} Вот мой наблюдатель:
final String currentuser = firebaseAuth.getCurrentUser().getEmail();
final UserHistoryViewModel userHistoryViewModel = new ViewModelProvider(getActivity()).get(UserHistoryViewModel.class);
userHistoryViewModel.getSize1(currentuser).observe(getViewLifecycleOwner(), new Observer<Integer>() {
@Override
public void onChanged(final Integer integer) {
if(integer!=0){
no_data_progressbar.setVisibility(View.VISIBLE);
userHistoryViewModel.getUserHistoryData(currentuser).observe(getViewLifecycleOwner(), new Observer<List<UserHistoryModel>>() {
@Override
public void onChanged(List<UserHistoryModel> userHistoryModels) {
no_data_progressbar.setVisibility(View.VISIBLE);
if(integer!=0) {
if (userHistoryModels.size() != 0) {
no_data_progressbar.setVisibility(View.INVISIBLE);
no_data.setVisibility(View.INVISIBLE);
check_data.setVisibility(View.INVISIBLE);
userHistoryModelList.addAll(userHistoryModels);
userHistoryViewAdapter.setUserHistoryModels(userHistoryModelList);
}
}
}
});
}else{
userHistoryModelList.clear();
userHistoryViewAdapter.notifyDataSetChanged();
no_data_progressbar.setVisibility(View.INVISIBLE);
no_data.setVisibility(View.VISIBLE);
check_data.setVisibility(View.VISIBLE);
}
}
});
функция выхода:
private void Logout() {
if(network.isConnectingToInternet()){
// if (Build.VERSION_CODES.KITKAT <= Build.VERSION.SDK_INT) {
// ((ActivityManager) getContext().getSystemService(ACTIVITY_SERVICE))
// .clearApplicationUserData();
// return;
// }
no_data_progressbar.setVisibility(View.VISIBLE);
userHistoryModelList.clear();
userHistoryViewAdapter.notifyDataSetChanged();
no_data_progressbar.setVisibility(View.INVISIBLE);
Toast.makeText(getContext(),"Sign out",Toast.LENGTH_SHORT).show();
firebaseAuth.signOut();
navController.navigate(R.id.action_mainpage_to_loginscreen);
}
else {
new AlertDialog.Builder(getActivity())
.setTitle("No Internet")
.setMessage("Please connect to Internet first.")
.setPositiveButton(android.R.string.yes, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
getActivity().finish();
}
})
.setIcon(android.R.drawable.ic_dialog_alert)
.show();
}
}