DrawerMenu所遇到的坑
来源:互联网 发布:php支持多线程吗 编辑:程序博客网 时间:2024/05/10 23:18
项目中遇到应用侧滑菜单的需求很正常,这篇文章记录使用侧滑菜单的一些坑,基于NavigationLayout,主要为一下两个坑:
- 如何定义Navigation菜单项
- 如何动态改变Navigation菜单项
如何定义Navigation菜单项
首先定义要引用的menu.xml文件,一般由三种元素组成
menu, item, group
menu是根元素。item是子元素,表示menu中的一个菜单项,但其中可以继续嵌套menu,表示子菜单项。group表示具有相同行为的一组菜单项,比如把单击后保持选中状态的菜单项放在一个group中。
<?xml version="1.0" encoding="utf-8"?><menu xmlns:android="http://schemas.android.com/apk/res/android"> <group android:id="@+id/noteBook" android:orderInCategory="0" android:checkableBehavior="single"> <item android:orderInCategory="0" android:id="@+id/all" android:icon="@mipmap/ic_speaker_notes_black_24dp" android:title="All" /> </group> <group android:id="@+id/operation" android:orderInCategory="1"> <item android:orderInCategory="1" android:id="@+id/setting" android:icon="@drawable/ic_menu_share" android:title="Settings" /> <item android:orderInCategory="1" android:id="@+id/edit" android:icon="@drawable/ic_menu_send" android:title="Edit Notebooks" /> </group></menu>
这是一个简单的例子,一个menu下面有两个group,第一个group具有行为android:checkableBehavior=”single”,表示单击后保持item的选中状态。除此之外,我们还注意到有这么一个属性android:orderInCategory=”1”,通过这个属性我们可以为菜单项归类,表示这几个菜单项是属于第一类的,那几个是属于第二类的,这个操作为下面动态改变item打下基础。
如何动态改变Navigation菜单项改变
改变分两点,(不包括改变item的title属性之类的,相信大家都会),增加和删除
增加菜单项
这个例子很好的演示了如何动态的通过代码增加菜单项,大家可以看看。
看懂上面的例子,基本就会增加菜单项,但是菜单项的位置可能还要学习一下。
下面是我google的时候看到的一个很好的解释指导。
删除菜单
删除菜单项要先得到菜单项的id才能删除,如果只是menu.xml的菜单项还好说,我们可以之前定义好他们的id号,但是要是通过上述方式动态添加的item怎么办?
解决办法就是我们给动态增加的菜单项都指定一个相同Id号,然后删掉再添加。
下面是我的一个代码片段和运行效果:
private class NavMenuHolder{ private Menu menu; private ArrayList<String> item; public NavMenuHolder(Menu menu, ArrayList item){ this.menu = menu; this.item = new ArrayList<>(); item.add("ALL"); } public Menu getMenu(){ return menu; } public ArrayList getItem(){ return item; } } private class PopulateMenu extends AsyncTask<NavMenuHolder, Void, NavMenuHolder>{ @Override protected NavMenuHolder doInBackground(NavMenuHolder... params) { //Handle the menu to keep the peace in sqlite NavMenuHolder navMenuHolder = params[0]; ArrayList list = navMenuHolder.getItem(); //read from the sqlite to add the string list of notebook into the list list.addAll(DataBaseManager.getInstance(getApplicationContext()).getBookList()); return navMenuHolder; } @Override protected void onPostExecute(NavMenuHolder navMenuHolder) { super.onPostExecute(navMenuHolder); //set up the NavigationDrawer menu Menu menu = navMenuHolder.getMenu(); ArrayList list = navMenuHolder.getItem(); Toast.makeText(MainActivity.this, menu.getItem(menu.size() - 3).getTitle().toString(), Toast.LENGTH_SHORT).show(); //delete the menu first before we assign a new list while(menu.getItem(1).getItemId() == 925865936){ menu.removeItem(925865936); } for(int i = 0; i < list.size(); i++){ //add note to the menu group and set icon, assign a unique ID menu.add(R.id.noteBook, 925865936, 0, list.get(i).toString()) .setIcon(R.mipmap.ic_speaker_notes_black_24dp); } } }
ps: 如何在一开始就选中某个菜单:
这个有个很好的解释指导。
navigationView.getMenu().getItem(0).setChecked(true);
- DrawerMenu所遇到的坑
- 毕设中所遇到的坑
- Toolbar所遇到的坑
- Dialog所遇到的坑
- SQLite所遇到的坑
- Bitmap所遇到的坑
- Volley所遇到的坑
- Volley所遇到的坑
- Menu所遇到的坑
- ScrollView所遇到的坑
- Socket所遇到的坑
- ImageView所遇到的坑
- 图片所遇到的坑
- EasyUI所遇到的坑
- Eclipse所遇到的坑
- Maven所遇到的坑
- ios开发-storyboard所遇到的坑
- Google Service 集成所遇到的坑
- 5.1 深度学习之公式详细推导(Regularzation :L1 ,Dropout)
- 12 反 转 单 词
- 递归:检索固定路径内文件和文件夹数量
- ionic2初始化项目
- nginx 重启命令
- DrawerMenu所遇到的坑
- Android:在AS里执行脚本——CMD Support插件
- php中传值与传引用的区别
- 13 一个简单的化学问题
- Activity的生命周期
- RCNN2:基于RCNN的物体检测
- 我为什么要开博客
- 历时一年半独立开发的iOS平台的OCR类app上线了
- 14 反转的数字相加