如何清除回收者视图项目?

时间:2020-07-13 14:01:34

标签: android android-recyclerview

我正在处理应用程序,因为我使用了回收站视图来显示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);

    }



}

}

这是我的viewmodel类:

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();
        }

    }

2 个答案:

答案 0 :(得分:0)

我想您的活动中有一个arraylist或Mutablelist,当用户单击注销时,在列表上调用call clear()并通知适配器

答案 1 :(得分:0)

如果您使用的是ListAdapter,则想清除RecyclerView数据时可以执行以下操作:

myListAdapter.submitList(emptyList())

Java:

myListAdapter.submitList(new ArrayList<YourType>());

如果您使用的是RecyclerView.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();
}