你在 Android 中使用 Navigation 框架从 Fragment1 跳转到 Fragment2,然后又从 Fragment2 返回到 Fragment1,并且需要 Fragment1 接收从 Fragment2 传递过来的参数,可以按照以下步骤操作:
1. 定义参数
在 nav_graph.xml
中为目标 Fragment2 定义参数:
<fragment
android:id="@+id/fragment2"
android:name="com.example.myapp.Fragment2">
<argument
android:name="myArgument"
app:argType="string" />
</fragment>
**
2. 从 Fragment1 跳转到 Fragment2 并传递参数
在 Fragment1 中使用 NavController
执行导航,并传递参数到 Fragment2:
// 获取 NavController
NavController navController = Navigation.findNavController(requireView());
// 创建跳转的 action,并设置参数
Fragment1Directions.ActionFragment1ToFragment2 action =
Fragment1Directions.actionFragment1ToFragment2("Hello from Fragment1");
// 执行导航
navController.navigate(action);
**
3. 在 Fragment2 中接收参数
在 Fragment2 中接收从 Fragment1 传递过来的参数:
public class Fragment2 extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View view = inflater.inflate(R.layout.fragment_fragment2, container, false);
// 获取传递的参数
String myArgument = Fragment2Args.fromBundle(getArguments()).getMyArgument();
// 现在可以使用 myArgument 了
return view;
}
}
**
4. 从 Fragment2 返回到 Fragment1 并传递参数
在 Fragment2 中执行返回操作,并传递参数回到 Fragment1:
// 获取 NavController
NavController navController = Navigation.findNavController(requireView());
// 创建返回的 action,并设置参数
Fragment2Directions.ActionFragment2ToFragment1 action =
Fragment2Directions.actionFragment2ToFragment1("Hello back from Fragment2");
// 执行返回导航
navController.navigate(action);
**
5. 在 Fragment1 中接收从 Fragment2 返回的参数
在 Fragment1 的 onViewCreated
或者 onActivityCreated
方法中接收从 Fragment2 返回的参数:
@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
// 获取传递的参数
String returnedArgument = Fragment1Args.fromBundle(getArguments()).getMyArgument();
// 现在可以使用 returnedArgument 了
}
通过以上步骤,你可以在 Android 中安全地从一个 Fragment 跳转到另一个 Fragment,并确保在返回时能正确接收和处理参数。这种方式利用了 Navigation 框架的安全参数传递机制,保证了代码的可维护性和可读性。