如何在Android Studio导航抽屉Activity模板的Fragment间传递字符串变量
实现方案说明
你当前使用的导航抽屉模板采用Jetpack Navigation组件管理Fragment导航,Intent通常用于跨Activity传递数据,同Activity下的Fragment之间传参无需使用Intent,且你不需要修改现有MainActivity的代码,直接按以下步骤配置即可:
步骤1:确认导航图配置
找到项目中res/navigation/mobile_navigation.xml文件,假设你需要从HomeFragment向GalleryFragment传递字符串,在GalleryFragment对应的destination节点中添加参数声明:
<fragment android:id="@+id/nav_gallery" android:name="com.example.myt.ui.gallery.GalleryFragment" android:label="Gallery" tools:layout="@layout/fragment_gallery"> <!-- 添加字符串参数声明,name是参数名,defaultValue是默认值 --> <argument android:name="share_text" app:argType="string" android:defaultValue="默认值" /> </fragment>
步骤2:发送方Fragment(如HomeFragment)传递参数
在需要触发跳转的位置添加如下代码,比如点击HomeFragment里的某个按钮时:
// 要传递的字符串 String sendText = "需要传递的字符串内容"; // 封装Bundle Bundle bundle = new Bundle(); bundle.putString("share_text", sendText); // 跳转同时传参 NavController navController = Navigation.findNavController(view); navController.navigate(R.id.nav_gallery, bundle);
步骤3:接收方Fragment(如GalleryFragment)接收参数
在GalleryFragment的onViewCreated方法中获取参数即可:
@Override public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); // 获取传递的参数 if (getArguments() != null) { String receivedText = getArguments().getString("share_text"); // 这里就可以使用拿到的字符串了,比如赋值给TextView Log.d("参数接收", "拿到的字符串:" + receivedText); } }
可选优化方案
如果要避免手动写参数名出错,可以引入Navigation的Safe Args插件,通过自动生成的类安全传参,不需要手动拼写字符串参数名,适合参数较多的场景。
内容的提问来源于stack exchange,提问作者Михаил Потемкин
相关产品推荐
相关产品推荐

