В моем приложении есть черновики сообщений, которые я могу редактировать.Некоторые из моих черновиков включают вложения, которые я пытаюсь отправить в свою правку редактирования и показать их в утилите.В общем, мне удалось отправить моего струнного архива и получить его в моей деятельности.Но я не могу показать свои вложенные файлы, особенно их имена, в окне просмотра.Я пытался сделать что-то подобное:
adapter.notifyDataSetChanged();
, но мне это не помогло.
Итак, сначала я получаю из своего сообщения имена вложенных файлов:
file_name = Objects.requireNonNull(response.body()).getAttachesNames();
, затем помещаю эти имена в arraylist:
nameList = new ArrayList<>(Arrays.asList(file_name));
такой результат я вижу вмои журналы:
W: [eZV9f.jpg, index.html]
и затем я отправляю свой список через намерение в другое действие:
intent2.putStringArrayListExtra("attached_files", (ArrayList<String>) nameList);
получение данных из намерения:
Intent intent = getIntent();
extras = intent.getExtras();
if (extras != null) {
if (extras.containsKey("attached_files")) {
draft_files = getIntent().getStringArrayListExtra("attached_files");
Log.w("MY_TAG", String.valueOf(draft_files));
}
}
результаты из logcat:
W: [eZV9f.jpg, index.html]
инициализация моего адаптера и утилита просмотра:
adapter = new AttachedFileAdapter(mNames);
recyclerView = findViewById(R.id.recyclerView);
recyclerView.setLayoutManager(new LinearLayoutManager(WriteResponseMess.this, LinearLayoutManager.VERTICAL, false));
и затем я пытаюсь получить один элемент из этого списка и добавить его в мой ArrayList <>:
for (int i = 0; i < draft_files.size(); i++) {
mNames.addAll(Collections.singleton(draft_files.get(i)));
adapter.notifyDataSetChanged();
recyclerView.setAdapter(adapter);
Log.w("MY_TAG", draft_files.get(i));
Log.w("MY_TAG", String.valueOf(mNames));
}
все предыдущие фрагменты кода используются в моем методе onCreate (), и в результате всех этих действий я хотел бы видеть данные о доходах от другого действия.Иногда мне удавалось это сделать, но один элемент содержал все данные о доходах и выглядел так:
[eZV9f.jpg, index.html]
, и это было неправильно для меня.Я пытаюсь создать список, который будет содержать все элементы отдельно.Я также пытался использовать некоторую информацию из этой ссылки , которая связана с Коллекциями, но мне не удалось достичь цели моей задачи.В общем, я уверен, что решение очень простое, но я его не вижу.
update
весь мой класс активности содержит более 1000 строк, и я поделюсь всем кодом, которыйсвязан с добавлением вложений и отображением прикрепленных данных в моей форме записи:
Вот мой диалог для получения списка каталогов и выбора некоторых файлов:
@Override
protected Dialog onCreateDialog(int id) {
Dialog dialog = null;
switch (id) {
case CUSTOM_DIALOG_ID:
dialog = new Dialog(WriteResponseMess.this, android.R.style.Theme_DeviceDefault_Light_NoActionBar_Fullscreen);
dialog.setContentView(R.layout.dialog_layout);
dialog.setCanceledOnTouchOutside(true);
Toolbar toolbar = dialog.findViewById(R.id.toolbar_d);
toolbar.setTitle("Add a new file.");
textFolder = dialog.findViewById(R.id.folder);
buttonUp = dialog.findViewById(R.id.up);
buttonUp.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
ListDir(curFolder.getParentFile());
}
});
dialog_ListView = dialog.findViewById(R.id.dialoglist);
final Dialog finalDialog1 = dialog;
dialog_ListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@RequiresApi(api = Build.VERSION_CODES.O)
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int position, long l) {
File selected = new File(curFolder, fileList.get(position));
if (selected.isDirectory()) {
ListDir(selected);
}
if (selected.isFile()) {
if (array.size() == 0) {
array = uploadFiles(array, selected.getName(), convertFileToString(selected.getPath()));
adapter.notifyDataSetChanged();
getImages();
} else {
if (array.toString().contains(selected.getName())) {
Toast.makeText(WriteResponseMess.this, R.string.attaching_message, Toast.LENGTH_SHORT).show();
adapter.notifyDataSetChanged();
getImages();
} else {
array = uploadFiles(array, selected.getName(), convertFileToString(selected.getPath()));
adapter.notifyDataSetChanged();
getImages();
}
}
finalDialog1.dismiss();
ms.setArray(array);
}
}
});
break;
}
return dialog;
}
и метод для отображения прикрепленного списка, и вВообще этот метод работает, когда я создаю новое сообщение и прикрепляю новый файл, он работает нормально:
private void getImages() {
mNames.clear();
adapter.notifyDataSetChanged();
for (int i = 0; i < array.size(); i++) {
JsonObject object = array.get(i).getAsJsonObject();
if (extras != null) {
if (extras.containsKey("attached_files")) {
for (int j = 0; j < draft_files.size(); j++) {
mNames.clear();
mNames.add(draft_files.get(j));
adapter.notifyDataSetChanged();
//Log.w("MY_TAG", draft_files.get(i));
Log.w("MY_TAG", String.valueOf(mNames));
}
mNames.add(object.get("filename").toString().substring(1, object.get("filename").toString().length() - 1));
adapter.notifyDataSetChanged();
//Log.w("MY_TAG", Arrays.toString(draft_files));
Log.w("MY_TAG", Arrays.toString(new ArrayList[]{mNames}));
} else {
mNames.add(object.get("filename").toString().substring(1, object.get("filename").toString().length() - 1));
adapter.notifyDataSetChanged();
Log.w("MY_TAG", String.valueOf(mNames));
}
}
}
}