使用SafeArgs将参数从片段传递到活动

时间:2019-10-01 08:42:32

标签: android kotlin android-safe-args android-navigation-graph

使用导航图,当我从片段导航到活动并使用safeargs传递参数时,在活动中,我无法获取参数。我如何从片段传递参数???

在某些情况下,我可以通过getArgument()函数获取参数,但不能在活动中获取参数。

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

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

在B活动中,在onCreate中获取参数:

val args = BActivityArgs.fromBundle(savedInstanceState!!)

但是我的应用立即崩溃。

4 个答案:

答案 0 :(得分:3)

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

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

因此,如果接收端有getArguments(),只需将getIntent().getExtras()替换为Activity

答案 1 :(得分: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 + "")
}

答案 2 :(得分:0)

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

完美运行

答案 3 :(得分:0)

  • 如官方文档中所述HERE
<块引用>

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

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

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

相关问题