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

初始化底部导航栏  

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

初始化的项目结构如下:

安卓Bottom Navigation Activity的自定义使用,即常见错误的处理_第1张图片

  • 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的自定义使用,即常见错误的处理_第2张图片

 

        修改ViewModel文件时会有如下弹窗,我们选中点击OK即可。安卓Bottom Navigation Activity的自定义使用,即常见错误的处理_第3张图片

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

安卓Bottom Navigation Activity的自定义使用,即常见错误的处理_第4张图片

         这个问题来源于我们没有修改该文件的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文件夹中添加图标)




    

    

    

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




    

    

    

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

我们找到报错的行

由于我们修改了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的自定义使用,即常见错误的处理_第5张图片

 

你可能感兴趣的:(移动应用开发(安卓),android,ui)