亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何從房間數據庫中刪除回收者視圖項目

如何從房間數據庫中刪除回收者視圖項目

ITMISS 2023-04-26 14:42:29
我正在使用 MVVM 架構模型創建一個應用程序。我在 MainActivity 中有回收器視圖,單擊回收器視圖項目中的刪除按鈕時,它應該從房間數據庫中刪除。我知道可以在適配器類中刪除項目,但因為我正在使用MVVM模型我想在Repository類中進行刪除操作。這是我的代碼如下:UserDao.java@Daopublic interface UserDao {@Insert(onConflict = OnConflictStrategy.REPLACE)void Insert(User... users);@Query("SELECT * FROM Users")LiveData<List<User>> getRoomUsers();@Deletevoid Delete(User... user);}   UserAdapter.javapublic class UserAdapter extends RecyclerView.Adapter<UserAdapter.ViewHolder> {List<User> userList;Context context;public UserAdapter(List<User> userList, Context context) {    this.userList = userList;    this.context = context;}@NonNull@Overridepublic UserAdapter.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {    View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.user_row_layout,parent,false);    ViewHolder viewHolder = new ViewHolder(v);    return viewHolder;}@Overridepublic void onBindViewHolder(@NonNull UserAdapter.ViewHolder holder, int position) {    final User users = userList.get(position);    holder.row_name.setText(users.getName());    holder.row_age.setText(users.getAge());    holder.delete.setOnClickListener(new View.OnClickListener() {        @Override        public void onClick(View view) {        }    });}@Overridepublic int getItemCount() {    return userList.size();}public void setUserList(List<User> userList) {    this.userList = userList;    notifyDataSetChanged();}public class ViewHolder extends RecyclerView.ViewHolder {    TextView row_name,row_age;    ImageView delete;    public ViewHolder(@NonNull View itemView) {        super(itemView);        row_name = itemView.findViewById(R.id.row_name);        row_age = itemView.findViewById(R.id.row_age);        delete = itemView.findViewById(R.id.delete);      }   }}
查看完整描述

2 回答

?
倚天杖

TA貢獻1828條經驗 獲得超3個贊

首先,UserViewModel像在 中那樣在您的適配器類中進行初始化MainActivity,然后調用 delete 函數。


holder.delete.setOnClickListener(new View.OnClickListener() {

        @Override

        public void onClick(View view) {

             userModel.deleteItem(users);  

        }

    });

在類中添加此功能UserModel。


public void deleteItem(User user) = repo.deleteItem(user);

在UserRepository課堂上,調用Delete函數。


public void deleteItem(User user) {

        userDb.userDao().Delete(user);

 }


查看完整回答
反對 回復 2023-04-26
?
胡子哥哥

TA貢獻1825條經驗 獲得超6個贊

嘗試使用實時數據觀察數據庫的變化,無論何時執行任何操作,添加或刪除(在數據庫中),在您的觀察者中為回收者視圖刷新該數據


為您的適配器設置點擊監聽器


public interface OnListInteractionListener {

        // TODO: Update argument type and name

        void onListInteraction(User user);

    }

在適配器類


private final OnListInteractionListener mListener;


    public UserAdapter(List<User> users, OnListInteractionListener listener,Context context) {


        mListener = listener;

    }

并在視圖中綁定持有人


holder.delete.setOnClickListener(new View.OnClickListener() {

        @Override

        public void onClick(View view) {


mListener.onListInteraction(userList.get(position))

        }

    });

在您的活動/片段中實現該偵聽器,您可以從中訪問 Viewmodel 和 repo


查看完整回答
反對 回復 2023-04-26
  • 2 回答
  • 0 關注
  • 158 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號