android - 将数据发送到我的 RV 适配器时出现问题,我该如何解决?
问题描述
我正在尝试在我的应用程序中将文件附加到某些消息中。我已经设法做到了,但我的方法是基于带有适配器的自定义 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 适配器发送任何数据,我不明白为什么它取决于附加文件的方法。也许有人可以帮助我?
解决方案
完成创建适配器后,您无需再次创建适配器。只需更新您的ArrayList
(如添加、删除、更新列表中的对象)并用于adapter.notifyDataSetChanged()
反映更改。你也不需要setAdapter()
总是。喜欢
在onCreate()
1. 创建 recyclerView 对象 2. 创建 List 对象 3. 通过传递 List 创建适配器对象
每当数据更改时: 1. 像添加新对象一样,删除或更新到 arrayList 然后使用adapter.notifyDataSetChanged()
推荐阅读
- javascript - 将数组与字符串进行比较,并将在数组中找到的所有项目替换为字符串中的公共字符
- c# - 验证数据网格 C# 中的复选框
- reporting-services - 为表格报表中的单元格创建集合表达式
- kernel - 高斯过程的常数核
- javascript - 测试 sagas:调用效果的存根响应
- node.js - 使用 NGINX 在端口 80 上为带有虚拟主机的 Amazon EC2 上托管的域的 node.js 应用程序提供 HTTP 流量
- javascript - 从记录集量角器中获取值
- c - 显示正确的输出后正在打印不需要的输出
- django - 工作假期计划者 Web 应用程序
- php - 如何使用 Ajax 在 Codeigniter 中发布数据