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

Passing argument from fragment to activity using SafeArgs

使用导航图,当我从片段导航到 activity 并且还使用 safeargs 传递参数时,在 activity 中,我无法获取参数。我怎样才能得到从片段传递的参数???

在片段中,我可以通过 getArgument() 函数获取参数,但在 activity 中不能。

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

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

并在 B activity 中通过 :

在 onCreate 中获取参数
val args = BActivityArgs.fromBundle(savedInstanceState!!)

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

查看 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 + "")
}

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

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

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

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

完美工作

  • 如官方文档所述HERE :

The Navigation component is designed for apps that have one main activity with multiple fragment destinations. The main activity is associated with a navigation graph and contains a NavHostFragment that is responsible for swapping destinations as needed. In an app with multiple activity destinations, each activity has its own navigation graph

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

  • 如果您在使用 SafeArgs 插件时仍然遇到问题,我强烈推荐官方 Android 团队 HERE

    发表的这篇中篇文章