大佬教程收集整理的这篇文章主要介绍了Android:如何在底部导航活动中将参数传递给 Fragment,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在开发 Java 应用程序,它有一个包含三个片段和底部导航栏的活动。它是由 AndroID studio 自动生成的(右键单击 -> 新建 -> 活动 -> 底部导航活动)。我需要将一个字符串参数传递给所有从属片段。
我翻阅了一些 Stack Overflow 文章,但没有找到我要找的内容。
Thew 活动类看起来像那样。我在默认代码中添加了一个 Bundle,它保留我的参数、一个参数构建器和 navGraph,然后将其添加到 NavController。
https://github.com/SP8EBC/Pogoda.cc/blob/master/app/src/main/java/cc/pogoda/mobile/pogodacc/activity/TrendActivity.java
public class TrendActivity extends AppCompatActivity {
@OverrIDe
protected voID onCreate(Bundle savedInstanceStatE) {
super.onCreate(savedInstanceStatE);
String stationname = (String)geTintent().getExtras().get("station");
setContentVIEw(R.layout.activity_trend);
NavArgument.builder builder = new NavArgument.builder();
Bundle bundle = new Bundle();
bundle.putString("station",stationName);
BottomNavigationVIEw navVIEw = findVIEwByID(R.ID.nav_vIEw);
// Passing each menu ID as a set of IDs because each
// menu should be consIDered as top level desTinations.
AppbarConfiguration appbarConfiguration = new AppbarConfiguration.builder(
R.ID.navigation_pressure,R.ID.navigation_temperature,R.ID.navigation_wind)
.build();
NavController navController = Navigation.findNavController(this,R.ID.nav_host_fragment);
NavGraph navGraph = navController.getNavInflater().inflate(R.navigation.mobile_navigation);
builder.setDefaultValue(stationName);
navGraph.addArgument("station",builder.build());
navController.setGraph(navGraph,bundlE);
NavigationUI.setupActionbarWithNavController(this,navController,appbarConfiguration);
NavigationUI.setupWithNavController(navVIEw,navController);
//
// NavArgument.builder builder = new NavArgument.builder();
// builder.setDefaultValue(stationName);
// navGraph.addArgument("station",builder.build());
// // navController.get
// navController.setGraph(navGraph);
}
}
片段代码看起来像 https://github.com/SP8EBC/Pogoda.cc/blob/master/app/src/main/java/cc/pogoda/mobile/pogodacc/activity/trend/wind/WindTrendFragment.java
public class WindTrendFragment extends Fragment {
private WindTrendviewmodel windTrendviewmodel;
public VIEw onCreateVIEw(@NonNull LayoutInflater inflater,VIEwGroup container,Bundle savedInstanceStatE) {
String station = "";
windTrendviewmodel =
new viewmodelProvIDer(this).get(WindTrendviewmodel.class);
VIEw root = inflater.inflate(R.layout.fragment_wind,container,falsE);
final TextVIEw textVIEw = root.findVIEwByID(R.ID.text_homE);
windTrendviewmodel.getText().observe(getVIEwlifecycleowner(),new Observer<String>() {
@OverrIDe
public voID onChanged(@Nullable String s) {
textVIEw.setText(s);
}
});
Bundle arg = this.getArguments();
if (arg != null) {
station = arg.getString("station");
}
return root;
}
}
现在我还有什么问题。这种构造仅适用于 WindTrendFragment,它是默认的(导航活动在启动时显示的),但方式很奇怪。看起来这个片段被创建了两次(onCreateVIEw 被调用了两次)。第一次在断点 this.getArguments();
上停止执行返回 null,但第二次我的包带有参数。主要问题是它只适用于这个片段。当我使用底部导航栏切换到另一个时,我总是在尝试获取参数时得到 null。
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)
以上是大佬教程为你收集整理的Android:如何在底部导航活动中将参数传递给 Fragment全部内容,希望文章能够帮你解决Android:如何在底部导航活动中将参数传递给 Fragment所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。