如何从房间数据库中删除回收者视图项目 [英] How to delete recycler view item from room database

查看:31
本文介绍了如何从房间数据库中删除回收者视图项目的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在使用 MVVM 架构模型来创建一个应用程序.我在 MainActivity 中有回收器视图,单击回收器视图项中的删除按钮,它应该从房间数据库中删除.我知道可以在适配器类中删除项目,但是作为我正在使用 MVVM 模型,我想在 Repository 类中执行删除操作.

I am using MVVM architecture model to create an app.I have recycler view in MainActivity and on click of a delete button in recycler view item it should be removed from room database.I know item can be removed within adapter class but as I am using MVVM model I want to carry out delete operation in Repository class.

这是我的代码如下:

UserDao.java

@Dao
public interface UserDao {

@Insert(onConflict = OnConflictStrategy.REPLACE)
void Insert(User... users);

@Query("SELECT * FROM Users")
LiveData<List<User>> getRoomUsers();

@Delete
void Delete(User... user);
}   

UserAdapter.java

public 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
@Override
public 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;
}

@Override
public 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) {


        }
    });
}

@Override
public 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);
      }
   }
}

UserRepository.java

public class UserRepository {

private Context context;
private UserDb userDb;
private LiveData<List<User>> listLiveData;

public UserRepository(Context context) {
    this.context = context;
    userDb = UserDb.getInstance(context);
    listLiveData = userDb.userDao().getRoomUsers();
}

public void getUserList(){

          Retrofit retrofit = RetrofitClient.getInstance();
          ApiService apiService = retrofit.create(ApiService.class);

          Call<List<User>> userList = apiService.getUser();

          userList.enqueue(new Callback<List<User>>() {
              @Override
              public void onResponse(Call<List<User>> call, final Response<List<User>> response) {

                  Completable.fromAction(new Action() {
                          @Override
                          public void run() throws Exception {

                              if(response.body() != null) {

                                  List<User> list = response.body();

                                  for (int i = 0; i < list.size(); i++) {

                                      String id = list.get(i).getId();
                                      String names = list.get(i).getName();
                                      String age = list.get(i).getAge();

                                          User user = new User(id,names,age);

                                          userDb.userDao().Insert(user);

                                   }
                                 }
                            }
                      }).subscribeOn(Schedulers.io())
                        .observeOn(AndroidSchedulers.mainThread())
                        .subscribe(new CompletableObserver() {
                            @Override
                            public void onSubscribe(Disposable d) {

                            }

                            @Override
                            public void onComplete() {

                                Toast.makeText(context,"Data inserted",Toast.LENGTH_SHORT).show();
                            }

                            @Override
                            public void onError(Throwable e) {

                                Toast.makeText(context,e.getMessage(),Toast.LENGTH_LONG).show();
                            }
                        });


              }

              @Override
              public void onFailure(Call<List<User>> call, Throwable t) {
                  Toast.makeText(context,t.getMessage(),Toast.LENGTH_LONG).show();
              }
          });

}

public LiveData<List<User>> getRoomUsers(){

    return listLiveData;
  }
}

UserViewModel.java

public class UserViewModel extends AndroidViewModel {

private UserRepository repo;
private LiveData<List<User>> listLiveData;

public UserViewModel(@NonNull Application application) {
    super(application);

    repo = new UserRepository(application);
    listLiveData = repo.getRoomUsers();

}

public LiveData<List<User>> getListLiveData() {
    return listLiveData;
  }
}

MainActivity.java

public class MainActivity extends AppCompatActivity {

UserRepository userRepository;
RecyclerView recyclerView;
UserViewModel userModel;
List<User> userList;
UserAdapter adapter;
ProgressBar prg;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    Toolbar toolbar = findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);

    prg = findViewById(R.id.prg);

    userRepository = new UserRepository(this);
    userModel = ViewModelProviders.of(this).get(UserViewModel.class);

    recyclerView = findViewById(R.id.recyclerView);
    recyclerView.setHasFixedSize(true);
    recyclerView.setLayoutManager(new LinearLayoutManager(this));

    userList = new ArrayList<>();

    adapter = new UserAdapter(userList,this);
    recyclerView.setAdapter(adapter);

    userModel.getListLiveData().observe(this, new Observer<List<User>>() {

        @Override
        public void onChanged(List<User> users) {

            prg.setVisibility(View.INVISIBLE);
            adapter.setUserList(users);
        }
    });

    FloatingActionButton fab = findViewById(R.id.fab);
    fab.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Intent i = new Intent(MainActivity.this,AddUser.class);
            startActivity(i);
        }
    });

    userRepository.getUserList();
 }

有人请告诉我如何实现删除操作.任何帮助将不胜感激.

Someone please let me know how do I implement delete operation. Any help would be appreciated.

谢谢

推荐答案

首先,在你的适配器类中初始化 UserViewModel 就像你在 MainActivity 中所做的那样,然后调用 delete 函数.

Firstly, initialize UserViewModel in your adapter class like how you did in MainActivity, then call delete function.

holder.delete.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
             userModel.deleteItem(users);  
        }
    });

UserModel 类中添加这个函数.

Add this function in UserModel class.

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

UserRepository 类中,调用Delete 函数.

In UserRepository class, call Delete function.

public void deleteItem(User user) {
        userDb.userDao().Delete(user);
 }

这篇关于如何从房间数据库中删除回收者视图项目的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆