【发布时间】:2021-03-22 04:47:03
【问题描述】:
当用户从房间数据库中删除项目时,我想更新我的回收站视图数据。我在适配器中尝试了notifyDataSetChanged(),但它没有更新。
这是我的适配器的代码
public class WatchlistAdapter extends RecyclerView.Adapter<WatchlistAdapter.MyHolder> {
Context mContext;
List<Task> watchList;
public WatchlistAdapter(Context mContext, List<Task> watchList) {
this.mContext = mContext;
this.watchList = watchList;
}
@NonNull
@Override
public MyHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(mContext).inflate(R.layout.watch_list_layout, parent, false);
return new MyHolder(view);
}
@Override
public void onBindViewHolder(@NonNull MyHolder holder, int position) {
Task t = watchList.get(position);
holder.title.setText(t.getTitle());
holder.type.setText(t.getType());
holder.deleteIcon.setOnClickListener(V->{
deleteItem(t);
Log.d("myapp", "deleted:"+ t.toString());
notifyDataSetChanged();
});
}
@Override
public int getItemCount() {
return watchList.size();
}
public static class MyHolder extends RecyclerView.ViewHolder {
TextView title;
TextView type;
ImageView deleteIcon;
public MyHolder(@NonNull View itemView) {
super(itemView);
title = itemView.findViewById(R.id.title_name);
type = itemView.findViewById(R.id.type);
deleteIcon = itemView.findViewById(R.id.delete);
}
}
private void deleteItem(final Task task){
class Delete extends AsyncTask<Void, Void, Void>{
@Override
protected Void doInBackground(Void... voids) {
DatabaseClient.getInstance(mContext)
.getAppDatabase()
.taskDao()
.delete(task);
return null;
}
@Override
protected void onPostExecute(Void unused) {
super.onPostExecute(unused);
Toast.makeText(mContext, "Removed" , Toast.LENGTH_SHORT).show();
}
}
Delete dt = new Delete();
dt.execute();
}
}
【问题讨论】:
-
您已选择自己处理配置更改。这意味着您,而不是系统,需要手动交换需要更改的每一件事。当您似乎想要自动换出资源的默认行为时,为什么还要说要处理方向更改?
-
我是原生应用程序开发的初学者,我只是在尝试一些东西。所以我不确定......
-
我应该如何手动解决这个问题??
标签: java android android-recyclerview android-adapter