基于Intent来动态添加Menu的Item
来源:互联网 发布:中国老龄人口数据 编辑:程序博客网 时间:2024/05/24 06:36
基于Intent对象来添加菜单项
有些时候,你想要菜单项使用一个Intent对象来启动一个Activity(不管这个Activity是你的应用程序中的还是其他应用程序中的)。
当你知道你要使用的Intent对象,并且也指定了启动这个Intent对象的菜单项时,你就能够在对应的on-item-selected回调方法(如onOptionsItemSelected()回调方法)调用期间用startActivity()方法执行这个Intent对象。
但是,如果你不确定用户设备上是否包含了处理这个Intent对象的应用程序,那么添加调用这个Intent对象的菜单项就有可能导致一个非功能性菜单的产生,因为可能没有接受这个Intent对象的Activity。要解决这个问题,Android能够让你在设备上查找处理你的Intent对象的Activity时,动态的把菜单项添加到菜单中。
以下是在能够接受Intent对象的有效的Activity基础上来添加菜单项的方法:
用CATEGORY_ALTERNATIVE或CATEGORY_SELECTED_ALTERNATIVE分类,再加上一些其他的要求,定义一个Intent对象。
调用Menu.addIntentOptions()方法,Android会搜索系统中能够接受这个Intent对象的任何应用程序,并把它们添加到你的菜单中。
如果没有安装能够满足Intent要求的应用程序,那么就不会添加菜单项。
注意:CATEGORY_SELECTED_ALTERNATIVE被用于处理屏幕上当前被选择的元素。因此,应该只在用onCreateContextMenu()方法创建菜单时使用这个分类。
如:
@Override
public boolean onCreateOptionsMenu(Menu menu){
super.onCreateOptionsMenu(menu);
// Create an Intent that describes the requirements to fulfill, to be included// in our menu. The offering app must include a category value of Intent.CATEGORY_ALTERNATIVE.Intent intent = new Intent(null, dataUri);intent.addCategory(Intent.CATEGORY_ALTERNATIVE);// Search and populate the menu with acceptable offering applications.menu.addIntentOptions( R.id.intent_group, // Menu group to which new items will be added 0, // Unique item ID (none) 0, // Order for the items (none) this.getComponentName(), // The current activity name null, // Specific items to place first (none) intent, // Intent created above that describes our requirements 0, // Additional flags to control items (none) null); // Array of MenuItems that correlate to specific items (none)return true;
}
对于找到的每个提供了跟定义的Intent对象匹配的Intent过滤器的Activity,都会添加一个菜单项,这个菜单项使用Intent过滤器的android:label的属性值做为菜单项的标题、应用程序的图标做为菜单项的图标。addIntentOptions()方法返回被添加的菜单的个数。
注意:当你调用addIntentOptions()方法时,它会覆盖在第一个参数中指定的菜单组的所有菜单项。
允许你的Activity被添加给其他菜单
你也能够包Activity的服务提供给其他的应用程序,以便你的应用能够包含在其他应用的菜单中。
要想在其他的应用程序菜单中包含你的应用程序,你需要向通常那样定义一个Intent过滤器,但要确认包括CATEGORY_ALTERNATIVE或CATEGORY_SELECTED_ALTERNATIVE分类,如:
<intent-filter label="@string/resize_image"> ... <category android:name="android.intent.category.ALTERNATIVE" /> <category android:name="android.intent.category.SELECTED_ALTERNATIVE" /> ...</intent-filter>
- 基于Intent来动态添加Menu的Item
- Extjs动态添加子菜单:Ext.menu.Item 动态添加 Ext.menu.Menu
- 动态加载menu item
- magento 后台menu 添加item
- 添加menu的item的两种方法
- android 动态修改menu item的内容title
- 动态改变Menu item的显示字体内容
- MFC_CMenu_AppendMenu_基于dialog的动态创建menu
- 如何使用Loader来动态载入一个基于item的Component
- easyUI menu动态添加
- expandablelistview 动态添加不同的子item。
- Android为Menu添加item及响应函数
- dropdownlist动态添加item
- dropdownlist动态添加item
- Menu运行时动态删除item
- NavigationView中,动态增加item以及menu
- 动态显示文件名之 Intent和Menu
- 如何在基于Dialog的程序中添加menu菜单 ?
- oracle常用命令--更新/修改表数据之update命令
- 导入项目出现的各种失误合集
- Linux设备驱动中的并发控制,原子打操作、自旋锁、信号量、完成量、互斥体
- idea 导入web项目报错:Error running tomcat: Can't find catalina.jar
- Error instantiating servlet class org.springframework.web.servlet.DispatcherServlet
- 基于Intent来动态添加Menu的Item
- highcharts报表开发 一:chart配置
- yii2系统定义的常用路径别名
- Genlovy_Hoo大神的杰作
- mysql 远程访问不行解决方法 Host is not allowed to connect to
- “混淆”——给代码披上一件冲锋衣,真不容易!
- 聊聊Spring Cloud版本的那些事儿
- 【Unity&UGUI】代码控制 text文本
- 宽度优先搜索