[英]Sending argument to Fragment from Activity using NavigationComponent and SafeArgs with the same name reference
[英]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();
完美工作
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.