程序问答   发布时间:2022-06-01  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了Android:如何在底部导航活动中将参数传递给 Fragment大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决Android:如何在底部导航活动中将参数传递给 Fragment?

开发过程中遇到Android:如何在底部导航活动中将参数传递给 Fragment的问题如何解决?下面主要结合日常开发的经验,给出你关于Android:如何在底部导航活动中将参数传递给 Fragment的解决方法建议,希望对你解决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,请注明来意。
标签: