Как показать доход в массиве строк намерений на Android-ресивере? - PullRequest
0 голосов
/ 12 декабря 2018

В моем приложении есть черновики сообщений, которые я могу редактировать.Некоторые из моих черновиков включают вложения, которые я пытаюсь отправить в свою правку редактирования и показать их в утилите.В общем, мне удалось отправить моего струнного архива и получить его в моей деятельности.Но я не могу показать свои вложенные файлы, особенно их имена, в окне просмотра.Я пытался сделать что-то подобное:

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));
                }
            }


        }

    }

1 Ответ

0 голосов
/ 12 декабря 2018

нет необходимости устанавливать адаптер дважды.удалить эту строку

recyclerView.setAdapter(adapter);

С

for (int i = 0; i < draft_files.size(); i++) {
    mNames.addAll(Collections.singleton(draft_files.get(i)));
    adapter.notifyDataSetChanged();
    //recyclerView.setAdapter(adapter); no need
    Log.w("MY_TAG", draft_files.get(i));
    Log.w("MY_TAG", String.valueOf(mNames));
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...