使用 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
发表的这篇中篇文章
使用导航图,当我从片段导航到 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
发表的这篇中篇文章