Передача данных из фрагмента в DialogFragment - PullRequest
0 голосов
/ 07 июня 2019

Я пытаюсь показать диалоговое окно, когда получаю сообщение об ошибке залпа и говорю пользователю повторить попытку, поэтому я выбираю dialogFragment, чтобы иметь возможность настроить его.

Я обрабатываю ошибку следующим образом в моем классе Fragment:

if (vError instanceof TimeoutError || vError instanceof NoConnectionError) {
                    Toast.makeText(getContext(),
                            Objects.requireNonNull(getActivity()).getString(R.string.error_network_timeout),
                            Toast.LENGTH_LONG).show();
                } else if (vError instanceof AuthFailureError) {
                    Toast.makeText(getContext(),
                            Objects.requireNonNull(getContext()).getString(R.string.error_network_auth_error),
                            Toast.LENGTH_LONG).show();
                } else if (vError instanceof ServerError) {
                    Toast.makeText(getContext(),
                            Objects.requireNonNull(getContext()).getString(R.string.error_network_server_error),
                            Toast.LENGTH_LONG).show();
                } else if (vError instanceof NetworkError) {
                    Toast.makeText(getContext(),
                            Objects.requireNonNull(getContext()).getString(R.string.error_network_network_error),
                            Toast.LENGTH_LONG).show();
                } else if (vError instanceof ParseError) {
                    Toast.makeText(getContext(),
                            Objects.requireNonNull(getContext()).getString(R.string.error_network_parse_faillure),
                            Toast.LENGTH_LONG).show();
                }

На самом деле я могу показывать только тост сообщения по типу ошибки.

С помощью следующего я пытаюсь передать сообщение в качестве аргумента, но, похоже, он не работает.

Bundle args = new Bundle();
args.putString("vErr", "vErr");
DialogFragment errFragment = new NetworkErrorDialogFragment();
errFragment.setArguments(args);
errFragment.show(getFragmentManager(), "NetErrDialogFragment");

Edit: Получение значения:

В onCreateView диалогового окна:

errorTextView.setText(getArguments().getString("vErr"));

Ответы [ 2 ]

0 голосов
/ 07 июня 2019

DialogFragment использует метод onCreateDialog () для создания диалога и представления его содержимого.поэтому вам нужно переопределить этот метод и установить для него соответствующий вид содержимого:

    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        Dialog dialog =new AppCompatDialog(getContext(), getTheme());
        dialog.setContentView(R.layout.some_content_view);
        // retreiving arguments here
        TextView errorTextView = dialog.findViewById(errorTextViewId);
        errorTextView.setText(getArguments().getString("vErr"));
        return dialog;
    }
0 голосов
/ 07 июня 2019

Получаете ли вы на

 onCreate(){
 getArguments
}

NetworkErrorDialogFragment?

...