【问题标题】:How to notify RecyclerView in adapter class to update when changes occur in room database如何在房间数据库发生更改时通知适配器类中的 RecyclerView 进行更新
【发布时间】: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


【解决方案1】:

有两种方式供大家参考。

1.1 更改AndroidManifest.xml

在AndroidManifest.xml文件的activity中添加如下内容:

风景: android:screenOrientation=”landscape”

肖像: android:screenOrientation=”portrait”

1.2 setRequestedOrientation(代码设置)

风景: setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);

肖像: setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-09-30
    • 2018-07-07
    • 2021-07-22
    • 2020-10-23
    • 1970-01-01
    • 2012-02-12
    相关资源
    最近更新 更多