我工作的应用程序,我已经使用回收器视图显示数据从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);
}
}
}
我假设您的activity中有一个arraylist或Mutablelist,当用户单击list上的log out call clear()并通知适配器时。 这是观察者。
userHistoryViewModel.getUserHistoryData(currentuser).observe(getViewLifecycleOwner(), new Observer<List<UserHistoryModel>>() {
@Override
public void onChanged(List<UserHistoryModel> userHistoryModels) {
if(integer!=0) {
if (userHistoryModels.size() != 0) {
userHistoryModelList.add(userHistoryModels);
no_data_progressbar.setVisibility(View.INVISIBLE);
no_data.setVisibility(View.INVISIBLE);
check_data.setVisibility(View.INVISIBLE);
userHistoryViewAdapter.setUserHistoryModels(userHistoryModelList);
userHistoryViewAdapter.notifyDataSetChanged();
}
}else {
no_data_progressbar.setVisibility(View.INVISIBLE);
no_data.setVisibility(View.VISIBLE);
check_data.setVisibility(View.VISIBLE);
}
}
这是名单。
private List<UserHistoryModel>userHistoryModelList;
如果您使用的是ListAdapter
,则可以在清除RecycerView数据时执行以下操作:
myListAdapter.submitList(emptyList())
Java:
myListAdapter.submitList(new ArrayList<YourType>());
如果使用的是RecycerView.adapter
实现,则需要将适配器的内部数据重置为空,然后通知适配器数据已更改。
在适配器类中:
private val _myLocalListOfData = mutableListOf<YourType>()
fun clearData() {
_myLocalListOfData.clear()
notifyDataSetChanged()
}
Java版本:
private List<YourType> _myLocalListOfData = new ArrayList<YourType>();
public void clearData() {
_myLocalListOfData.clear();
notifyDataSetChanged();
}