Передача аргумента из фрагмента в действие с помощью 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, ЗДЕСЬ