|
为了让其它应用程序获得这些动作,通过在它们的manifest节点里添加intent-filter标签来发布它们。
Intent Filter描述了它能执行的动作以及可以执行的数据。后者在Intent解析过程中决定什么时候这个动作有效的期间使用。种类的标签必须是ALTERNATIVE和SELECTED_ALTERNATIVE之一或两者。菜单项使用的文
本在android:label属性中指定。
在你的Activity菜单中并入匿名动作
在运行时为你的菜单添加选项,你可以考虑在菜单对象上使用addIntentOptions方法,传入一个Intent,指定了你想提供的动作所需的数据。一般来说,它会被Activity的onCreateOptionsMenu和onCreateContextMenu处理函数处理。
你创建的Intent将用于解析在Intent Filter中提供了能在你指定数据上执行动作的组件。Intent用于查找动作,所以不要指定一个;它只需要指定指定动作所需的数据。你也必须制定动作的种类为
CATEGORY_ALTERNATIVE或CATEGORY_SELECTED_ALTERNATIVE。
下面的框架代码显示了为菜单-动作解析创建一个Intent:
java代码: Intent intent = new Intent();
intent.setData(MyProvider.CONTENT_URI);
intent.addCategory(Intent.CATEGORY_ALTERNATIVE);
在你想要填入的菜单里传递这个Intent到addIntentOptions方法中,还包括任一选项标志,调用类的名称,菜单的组和菜单的ID值。你还可以指定一个Intent数据来创建附加的菜单项。
接下来的代码片段给出了如何动态填入Activity菜单的想法
java代码: @Override
public boolean onCreateOptionsMenu(Menu menu) {
super.onCreateOptionsMenu(menu);
// Create the intent used to resolve which actions
// should appear in the menu.
Intent intent = new Intent();
intent.setData(MoonBaseProvider.CONTENT_URI);
intent.addCategory(Intent.CATEGORY_SELECTED_ALTERNATIVE);
// Normal menu options to let you set a group and ID
// values for the menu items you’re adding.
int menuGroup = 0;
int menuItemId = 0;
int menuItemOrder = Menu.NONE;
// Provide the name of the component that’s calling
// the action -- generally the current Activity.
ComponentName caller = getComponentName();
// Define intents that should be added first.
Intent[] specificIntents = null;
// The menu items created from the previous Intents
// will populate this array.
MenuItem[] outSpecificItems = null;
// Set any optional flags.
int flags = Menu.FLAG_APPEND_TO_GROUP;
// Populate the menu
menu.addIntentOptions(menuGroup, menuItemId, menuItemOrder,
caller, specificIntents, intent, flags, outSpecificItems);
return true;
} |
|