Передача аргумента из фрагмента в действие с помощью SafeArgs

Используя навигационный граф, когда я перехожу от фрагмента к действию, а также передаю аргумент с помощью safeargs в действии, я не могу получить аргумент. Как я могу получить аргумент, передаваемый из фрагмента???

Во фрагменте я могу получить аргумент getArgument() функция, но не в деятельности.

Во фрагменте я переключаюсь на другое действие:

findNavController().navigate(AFragmentDirections.actionAFragmentToBActivity(1)

а в активности B получить аргумент в onCreate:

val args = BActivityArgs.fromBundle(savedInstanceState!!)

но мое приложение сразу вылетает.

4 ответа

Решение

Ознакомьтесь с Android Doc:-

https://developer.android.com/guide/navigation/navigation-pass-data

Отправить данные

@Override
public void onClick(View view) {
EditText amountTv = (EditText) getView().findViewById(R.id.editTextAmount);
int amount = Integer.parseInt(amountTv.getText().toString());
ConfirmationAction action =
       SpecifyAmountFragmentDirections.confirmationAction()
action.setAmount(amount)
Navigation.findNavController(view).navigate(action);
}

Получить данные:-

@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
TextView tv = view.findViewById(R.id.textViewAmount);
int amount = ConfirmationFragmentArgs.fromBundle(getArguments()).getAmount();
tv.setText(amount + "")
}

Принятый ответ не является ответом на ваш вопрос. Как вы указываете: вы не можете использоватьgetArguments() в твоем Activity, вы можете сделать это только во фрагменте. Однако в действии вы можете получить такие данные (синтаксис java):

String aField = BActivityArgs.fromBundle(getIntent().getExtras()).getAField()

Итак, просто замените getArguments() с участием getIntent().getExtras() если у вас есть Activity на принимающей стороне.

      BActivityArgs.fromBundle(getIntent().getExtras()).getAField();

Отлично работают

  • Как указано в официальной документации ЗДЕСЬ :

Компонент "Навигация" предназначен для приложений, у которых есть одно основное действие с несколькими целевыми фрагментами. Основное действие связано с графом навигации и содержит NavHostFragment, который отвечает за замену мест назначения по мере необходимости. В приложении с несколькими направлениями действий каждое действие имеет свой собственный график навигации.

  • Решением может быть следующее: переосмыслить, можно ли преобразовать действие во фрагмент, и тогда вновь созданный фрагмент может обрабатываться тем же компонентом навигации. Таким образом, вы можете использовать обычный синтаксис SafeArgs для передачи и извлечения данных.

  • Если у вас все еще возникают проблемы с плагином SafeArgs, я настоятельно рекомендую эту среднюю статью официальной команды Android, ЗДЕСЬ

Другие вопросы по тегам