将数据发送到RV适配器时出现问题,如何解决?

时间:2019-05-04 12:00:03

标签: android android-recyclerview recycler-adapter

我正在尝试在我的应用程序中将文件附加到某些消息。我已经做到了,但是我的方法是基于带有适配器的自定义RV,我将文件夹和文件列表发送到该适配器。我决定使用onActivityResult。我做了这样的事:

public void showDialod() {
        if (isReadStoragePermissionGranted()) {
            Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
            intent.setType("*/*");
            startActivityForResult(intent, 7);
        } else {
            isReadStoragePermissionGranted();
        }
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (resultCode == RESULT_OK && requestCode == 7) {
            if (data != null && data.getData() != null) {
                Uri selectedImageUri = data.getData();

                convertFileToString(ImageFilePath.getPath(this, selectedImageUri));
                Log.i("m", ImageFilePath.getPath(this, selectedImageUri));
            }
        }
    }

通常,我的数组中充满了所有重要数据,但是更改附件文件的方法后,我无法显示附件文件。这是我显示附件文件的方法的代码:

private void getImages() {
        mNames.clear();
        adapter.updateNames(mNames);
        adapter.notifyDataSetChanged();


        if (extras != null) {
            if (extras.containsKey("attached_files")) {
                for (int j = 0; j < Objects.requireNonNull(draft_files).size(); j++) {
                    mNames.add(draft_files.get(j));
                }
                for (int i = 0; i < array.size(); i++) {
                    JsonObject object = array.get(i).getAsJsonObject();
                    mNames.add(object.get("filename").toString().substring(1, object.get("filename").toString().length() - 1));
                }

                adapter = new AttachedFileAdapter(mNames, getApplicationContext());
                adapter.updateNames(mNames);
                adapter.notifyDataSetChanged();
                recyclerView.setAdapter(adapter);

            } else {
                for (int i = 0; i < ms.getArray().size(); i++) {
                    JsonObject object = ms.getArray().get(i).getAsJsonObject();
                    mNames.add(object.get("filename").toString().substring(1, object.get("filename").toString().length() - 1));
                    adapter.updateNames(mNames);
                    adapter.notifyDataSetChanged();
                    recyclerView.setAdapter(adapter);
                }
            }
        } else {
            for (int i = 0; i < ms.getArray().size(); i++) {

                JsonObject object = ms.getArray().get(i).getAsJsonObject();
                mNames.add(object.get("filename").toString().substring(1, object.get("filename").toString().length() - 1));
                adapter.updateNames(mNames);
                adapter.notifyDataSetChanged();
                recyclerView.setAdapter(adapter);
            }


        }
    }

如我所见,我没有将任何数据发送到RV适配器,也无法理解为什么它取决于附加文件的方法。也许有人可以帮我吗?

1 个答案:

答案 0 :(得分:1)

创建适配器后,就无需再次创建适配器。只需更新您的ArrayList(例如从列表中添加,删除,更新对象),然后使用adapter.notifyDataSetChanged()来反映所做的更改。 另外,您不需要总是setAdapter()。喜欢

onCreate()中 1.创建recyclerView对象 2.创建列表对象 3.通过传递列表创建适配器对象

每当数据更改时: 1.像添加新对象一样,将其删除或更新到arrayList中,然后使用adapter.notifyDataSetChanged()

相关问题