提问者:小点点

如何清除回收器视图项?


我工作的应用程序,我已经使用回收器视图显示数据从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);

    }



}

}


共2个答案

匿名用户

我假设您的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();
}