0

使用导航图,当我从片段导航到活动并使用安全参数传递参数时,在活动中,我无法获得参数。我怎样才能得到从片段传递的参数???

在片段中,我可以按getArgument()函数获取参数,但不能在活动中获取。

在片段中,我通过以下方式切换到另一个活动:

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

并在 B 活动中通过以下方式在 onCreate 中获取参数:

val args = BActivityArgs.fromBundle(savedInstanceState!!)

但我的应用程序立即崩溃。

4

4 回答 4

5

接受的答案不是您问题的答案。正如您所指出的:您不能getArguments()在您的中使用Activity,您只能在片段中使用。但是,在活动中,您可以获得这样的数据(java 语法):

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

因此,如果您在接收端有一个,只需替换getArguments()为。getIntent().getExtras()Activity

于 2020-02-14T20:56:55.453 回答
0

查看 Android 文档:-

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

发送数据

@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 + "")
}
于 2019-10-01T09:41:31.880 回答
0
BActivityArgs.fromBundle(getIntent().getExtras()).getAField();

完美工作

于 2021-03-25T22:30:15.367 回答
0

Navigation 组件专为具有一个主要活动和多个片段目的地的应用程序而设计。主要活动与导航图相关联,并包含一个 NavHostFragment,负责根据需要交换目的地。在具有多个活动目的地的应用程序中,每个活动都有自己的导航图

  • 一个解决方案可能是:重新考虑是否可以将活动转换为片段,然后新创建的片段可以由相同的导航组件处理。因此允许您使用正常的 SafeArgs 语法来传递和检索数据。

  • 如果您仍然对 SafeArgs 插件有问题,我强烈推荐官方 Android 团队的这篇中等文章,这里

于 2021-07-09T23:34:35.527 回答