繁体   English   中英

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

[英]Passing argument from fragment to activity using SafeArgs

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

在片段中,我可以通过getArgument() function 获得参数,但不能在活动中。

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

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

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

val args = BActivityArgs.fromBundle(savedInstanceState!!)

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

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

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

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

查看 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 + "")
}
BActivityArgs.fromBundle(getIntent().getExtras()).getAField();

完美工作

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM