安卓Bottom Navigation Activity的自定义使用,即常见错误的处理

这篇具有很好参考价值的文章主要介绍了安卓Bottom Navigation Activity的自定义使用,即常见错误的处理。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

初始化底部导航栏  

        首先我们建立一个带有Bottom Navigation Activity项目,新建项目时直接选择Bottom Navigation Activity即可,也可以右键新建Bottom Navigation Activity活动。

初始化的项目结构如下:

安卓Bottom Navigation Activity的自定义使用,即常见错误的处理,移动应用开发(安卓),android,ui

  • java中ui文件夹中包含的三个文件夹即为底部导航栏的三个模块,xxxFragment为碎片文件,xxxViewModel为数据视图文件;
  • MainActivity是该底部导航栏的活动,三个碎片链接在该活动中;
  • layout文件夹中三个fragment_xxx.xml文件即为三个模块的布局文件,activity_main.xml文件即为MainActivity活动的布局文件;
  • menu文件夹中的bottom_nav_menu.xml为菜单配置文件(如果要增加模块需要在此处进行添加);
  • navigation文件夹中的mobile_navigation.xml为碎片与底部导航栏链接配置文件(如果要增加模块此处也需要进行添加);
  • values文件夹中的文件则为一些基本配置文件,如colors.xml为全局颜色配置。

自定义底部导航栏

        在上面初始化导航栏的基础上,我们进行自定义修改。

        首先,我们将ui文件夹中的文件夹级文件重命名(Shift+F6),例如:将dashboard改为myself

安卓Bottom Navigation Activity的自定义使用,即常见错误的处理,移动应用开发(安卓),android,ui

 文章来源地址https://www.toymoban.com/news/detail-739859.html

        修改ViewModel文件时会有如下弹窗,我们选中点击OK即可。安卓Bottom Navigation Activity的自定义使用,即常见错误的处理,移动应用开发(安卓),android,ui

         此时我们就会发现,myselfFragment文件报错Cannot resolve symbol 'FragmentDashboardBinding'

安卓Bottom Navigation Activity的自定义使用,即常见错误的处理,移动应用开发(安卓),android,ui

         这个问题来源于我们没有修改该文件的FragmentXxxBinding,修改如下:

// 修改前
public class MyselfFragment extends Fragment {

    private FragmentDashboardBinding binding;

    public View onCreateView(@NonNull LayoutInflater inflater,
                             ViewGroup container, Bundle savedInstanceState) {
        MyselfViewModel myselfViewModel =
                new ViewModelProvider(this).get(MyselfViewModel.class);

        binding = FragmentDashboardBinding.inflate(inflater, container, false);
        View root = binding.getRoot();

        final TextView textView = binding.textDashboard;
        myselfViewModel.getText().observe(getViewLifecycleOwner(), textView::setText);
        return root;
    }

    @Override
    public void onDestroyView() {
        super.onDestroyView();
        binding = null;
    }
}

// 修改后
public class MyselfFragment extends Fragment {

    private FragmentMyselfBinding binding;

    public View onCreateView(@NonNull LayoutInflater inflater,
                             ViewGroup container, Bundle savedInstanceState) {
        MyselfViewModel myselfViewModel =
                new ViewModelProvider(this).get(MyselfViewModel.class);

        binding = FragmentMyselfBinding.inflate(inflater, container, false);
        View root = binding.getRoot();

        final TextView textView = binding.textDashboard;
        myselfViewModel.getText().observe(getViewLifecycleOwner(), textView::setText);
        return root;
    }

    @Override
    public void onDestroyView() {
        super.onDestroyView();
        binding = null;
    }
}

接下来我们修改menu和navigation文件夹中的文件

bottom_nav_menu.xml文件(@string/title_myself需要在values文件夹中的strings.xml中进行配置,@drawable/ic_myself_black_24dp需要在drawable文件夹中添加图标)

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">

    <item
        android:id="@+id/navigation_home"
        android:icon="@drawable/ic_home_black_24dp"
        android:title="@string/title_home" />

    <item
        android:id="@+id/navigation_myself"
        android:icon="@drawable/ic_myself_black_24dp"
        android:title="@string/title_myself" />

    <item
        android:id="@+id/navigation_notifications"
        android:icon="@drawable/ic_notifications_black_24dp"
        android:title="@string/title_notifications" />

</menu>

mobile_navigation.xml文件修改如下:id属性用于在MainActivity中链接,name属性用于链接Fragment文件,label为标题,layout为布局文件。

<?xml version="1.0" encoding="utf-8"?>
<navigation xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/mobile_navigation"
    app:startDestination="@+id/navigation_home">

    <fragment
        android:id="@+id/navigation_home"
        android:name="com.example.bottom_nav_test.ui.home.HomeFragment"
        android:label="@string/title_home"
        tools:layout="@layout/fragment_home" />

    <fragment
        android:id="@+id/navigation_myself"
        android:name="com.example.bottom_nav_test.ui.myself.MyselfFragment"
        android:label="@string/title_Myself"
        tools:layout="@layout/fragment_myself" />

    <fragment
        android:id="@+id/navigation_notifications"
        android:name="com.example.bottom_nav_test.ui.notifications.NotificationsFragment"
        android:label="@string/title_notifications"
        tools:layout="@layout/fragment_notifications" />
</navigation>

此时MainActivity又会产生报错:Cannot resolve symbol 'navigation_dashboard'

我们找到报错的行

安卓Bottom Navigation Activity的自定义使用,即常见错误的处理,移动应用开发(安卓),android,ui

由于我们修改了mobile_navigation.xml的id属性,所以MainActivity中也需要进行修改。

修改如下:

AppBarConfiguration appBarConfiguration = new AppBarConfiguration.Builder(
                R.id.navigation_home, R.id.navigation_myself,             
                R.id.navigation_notifications).build();

 此时就启动成功了:(中间的标题在xxxViewModel.java中修改)

安卓Bottom Navigation Activity的自定义使用,即常见错误的处理,移动应用开发(安卓),android,ui

 

到了这里,关于安卓Bottom Navigation Activity的自定义使用,即常见错误的处理的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • android-使用PopupWindow实现随机排列的自定义密码键盘

    break; } else { b2 = true; } } if (b2) { data[i] = x; b = false; break; } } } return data; } keyboard_bg_big.xml ?xml version=\\\"1.0\\\" encoding=\\\"utf-8\\\"? item android:state_pressed=“true” android:drawable=“@drawable/key11”/ item android:state_focused=“true” android:drawable=“@drawable/key12”/ item android:state_focused=“false” android:state_p

    2024年04月27日
    浏览(35)
  • 微信小程序的自定义TabBar及Vant的使用

    1、在 资源管理器 空白位置,点右键打开 在外部终端窗口打开 2、初始化NPM npm init -y 3、安装命令 npm i @vant/weapp@1.3.3 -S --production 4、构建NPM包 在 工具 里选择构建NPM包 5、删除style:v2 在app.json里,删除\\\"style\\\":\\\"v2\\\" 6、按需引入 7、使用 1、定义 2、使用 1、配置 在app.json中的 ta

    2024年02月14日
    浏览(40)
  • 使用Python爬取GooglePlay并从复杂的自定义数据结构中实现解析

    【作者主页】: 吴秋霖 【作者介绍】:Python领域优质创作者、阿里云博客专家、华为云享专家。长期致力于Python与爬虫领域研究与开发工作! 【作者推荐】:对JS逆向感兴趣的朋友可以关注《爬虫JS逆向实战》,对分布式爬虫平台感兴趣的朋友可以关注《分布式爬虫平台搭建

    2024年02月04日
    浏览(46)
  • ElementUi 关于 el-upload的自定义上传(http-request)的使用

       在开发中 遇到如下需求,要求前端传参并导入excel表格。导入失败,要弹出错误信息,同时导出错误信息的excel表格,导入成功提示信息即可。 参考官方文档,把上传需要的属性加加入使用   改造之前: 设置headers信息 在el-upload标签中加入http-request ,如下: 具体操作方法

    2024年02月01日
    浏览(40)
  • 04训练——基于YOLO V8的自定义数据集训练——在windows环境下使用pycharm做训练-1总体步骤

    在上文中,笔者介绍了使用google公司提供的免费GPU资源colab来对大量的自定义数据集进行模型训练。该方法虽然简单好用,但是存在以下几方面的短板问题: 一是需要通过虚拟服务器做为跳板机来访问,总体操作起来非常繁杂。 二是需要将大量的数据上传缓慢,管理和使用非

    2024年02月07日
    浏览(49)
  • Unity导出安卓工程并新建activity用于放置隐私协议

    1.现在unity里导出安卓工程 2.用Android Studio,打开导出的工程 点击Open打开,这不用说了吧 3.右键新建一个empty Activity 4.替换这里为Activity 5.打开这个布局文件 6.点开design,自己搞下布局,这里我只是举个例子,大概这样 点开code,粘贴这段代码,就能得到一个跟我一样的界面

    2024年02月07日
    浏览(41)
  • 如何使用torch.nn.utils.prune稀疏神经网络,以及如何扩展它以实现自己的自定义剪裁技术

    最新的深度学习技术依赖于难以部署的过度参数化模型。 相反,已知生物神经网络使用有效的稀疏连通性。 为了减少内存,电池和硬件消耗,同时又不牺牲精度,在设备上部署轻量级模型并通过私有设备上计算来确保私密性,确定通过减少模型中的参数数量来压缩模型的最

    2024年02月12日
    浏览(43)
  • 安卓app后台运行时activity和dialog的一些区别

    Android app后台运行时,startactivity时可以启动其他activity,但是要弹出一个dialog是不被允许的,所以我的方案是把activity当做dialog来使用,这样就能正常弹出了.但是有的手机也不允许后台弹出一个activity,需要一些特殊权限的 方法是给activity一个dialog的主题即可 需要注意的是activity启动

    2024年02月10日
    浏览(45)
  • Java的自定义注解

            自定义注解包括注解声明、元注解、运行时处理器三个部分。注解声明指定了注解的名称、作用域、成员等信息;元注解则用来对注解进行修饰;运行时处理器则负责在程序运行过程中处理注解,并根据注解提供的信息执行相应的逻辑。自定义注解在编写框架、插

    2024年02月03日
    浏览(37)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包