【问题标题】:Refresh recyclerViewAdapter after an insertion in room插入房间后刷新 recyclerView 适配器
【发布时间】:2017-11-23 14:33:39
【问题描述】:

在我的FragmentonCreateView 中,我尝试从数据库中获取数据。我用的是安卓房间。

如果我得到 null 或 0 行 - 我会显示“更新”按钮。用户按下此按钮并从服务器获取数据,并插入数据库。之后我想刷新RecyclerView 并再次从数据库加载数据。

我尝试在onCreateView中加载数据:

MyApplication.me().getDatabase().categoryDao().getAll()
                .subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(categories -> {
                    if (categories == null || categories.isEmpty()) {
                        price.setVisibility(View.VISIBLE);
                        recyclerView.setVisibility(View.INVISIBLE);
                        Toast.makeText(getActivity(), "Update", Toast.LENGTH_SHORT).show();
                    } else {
                        CategoryAdapter categoryAdapter = new CategoryAdapter(categories);
                        categoryAdapter.setOnItemClickListener(new ClickHandler());
                        recyclerView.setAdapter(categoryAdapter);
                    }
                });

如果数据库有数据 - 一切都好。如果找不到数据,我会显示 Button 并在按下后发出休息请求并在此代码中得到结果

@Override
        public void onNext(ProductsResponse value) {
            ProductService.me().saveProducts(value.getProductItems());
        }

方法 saveProducts 将数据保存在数据库中,然后我需要刷新适配器!!!但是!!!

public void saveProducts(List<ProductItem> products) {
        new Thread(() -> {
            List<Product> productList = new ArrayList<>();

            for (ProductItem item : products) {
                ............
                productList.add(product);
            }
            MyApplication.me().getDatabase().productDao().insertAll(productList);
        }).start();

    }

这个方法在新线程中。我试过这个:

@Query("SELECT * FROM categories")
    Flowable<List<Category>> getAll();

在每次插入触发此代码后

.subscribe(categories -> {
                        if (categories == null || categories.isEmpty()) {
                            price.setVisibility(View.VISIBLE);
                            recyclerView.setVisibility(View.INVISIBLE);
                            Toast.makeText(getActivity(), "Update", Toast.LENGTH_SHORT).show();
                        } else {
                            CategoryAdapter categoryAdapter = new CategoryAdapter(categories);
                            categoryAdapter.setOnItemClickListener(new ClickHandler());
                            recyclerView.setAdapter(categoryAdapter);
                        }
                    });

但是适配器没有刷新

【问题讨论】:

    标签: android rx-java android-room


    【解决方案1】:

    你需要让你的 RecyclerView 再次可见:

    .subscribe(categories -> {
                        if (categories == null || categories.isEmpty()) {
                            price.setVisibility(View.VISIBLE);
                            recyclerView.setVisibility(View.INVISIBLE);
                            Toast.makeText(getActivity(), "Update", Toast.LENGTH_SHORT).show();
                        } else {
                            price.setVisibility(View.INVISIBLE); // HIDE BUTTON
                            recyclerView.setVisibility(View.VISIBLE); //SHOW LIST
                            CategoryAdapter categoryAdapter = new CategoryAdapter(categories);
                            categoryAdapter.setOnItemClickListener(new ClickHandler());
                            recyclerView.setAdapter(categoryAdapter);
                        }
                    });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-16
      • 1970-01-01
      • 1970-01-01
      • 2019-02-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多