Android和菜单
我是一个有经验的Java程序员。我开始从事一个小型的Android项目,我对Android为了更加灵活而复杂的编程感到非常失望。 确切地说,我的问题如下:我有一个菜单项,我需要在mu应用程序的几个菜单中使用。有没有一种方法可以创建一个菜单项对象(可能会将某个函数与之关联),并将其传递给其他活动,以便任何活动都可以将其添加到自己的contex菜单中 我试过这个: 创建了一个“res.menu.mymenu.xml”文件,其中包含一个与另一个“res.menu.mymenu2.xml”文件中的菜单项id相同的菜单项。然后我试过这个:Android和菜单,android,menuitem,Android,Menuitem,我是一个有经验的Java程序员。我开始从事一个小型的Android项目,我对Android为了更加灵活而复杂的编程感到非常失望。 确切地说,我的问题如下:我有一个菜单项,我需要在mu应用程序的几个菜单中使用。有没有一种方法可以创建一个菜单项对象(可能会将某个函数与之关联),并将其传递给其他活动,以便任何活动都可以将其添加到自己的contex菜单中 我试过这个: 创建了一个“res.menu.mymenu.xml”文件,其中包含一个与另一个“res.menu.mymenu2.xml”文件中的菜单项
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) {
super.onCreateContextMenu(menu, v, menuInfo);
MenuInflater inflater = getMenuInflater();
inflater.inflate(getMenuToInflate(), menu);
menu.add(0, R.id.mnhidefrom, 0, ((MenuItem)findViewById(R.id.mnhidefrom)).getTitle());
HideMenuAction.prepareAndGetHideMeMenuItem(menu, menuInfo); //creating an intent for "hide" menu item that will hold some data needed when user clicks the menu item.
}
但是没有运气。。。我在“菜单”上看到“空指针异常”。添加“行…”
有没有一种正常的面向对象的方法,来创建一个菜单项,该菜单项将知道它应该做什么,而不考虑外部的任何事情(比如说,它所属的菜单),然后像任何其他对象一样传递它,并将它添加到我喜欢的任何菜单中(就像我可以使用Swing菜单和JMenuItems一样)
有没有一种正常的、面向对象的方法
有。这叫做继承
创建一个基本的活动
,在该活动中,您将选项菜单
充气一次,并为所有活动扩展此活动
public class BaseActivity extends Activity {
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.menu, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.blabla:
// do something
break;
case R.id.blablab:
// do something
break;
}
return true;
}
}
现在您可以执行以下操作:
public class MainActivity extends BaseActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
super.onCreateOptionsMenu(menu);
return true;
}
}
艾哈迈德说了一半。这将为您提供一系列始终可用的菜单选项。为每个扩展活动添加特定菜单选项的方法是为其编写一个片段。片段将包含在活动布局中,但您可以使其不占用任何空间或用于填充。当片段实现OnCreateOptions菜单时,它添加的选项将与活动创建的选项合并
有关更多详细信息,请阅读本指南中与选项菜单有关的所有内容:
我使用了Ahmad描述的BaseActivity。它很好用。
现在我想在一个特定的活动中显示一个特殊的菜单项(它扩展了BaseActivity)
这和我预期的一样,但我无法让新插入的菜单项位于第一个位置。
我需要它位于第一个位置,这样它就会直接显示在ActionBar中,用户无需单击options按钮即可看到一个新选项
编辑:我自己刚刚找到了解决方案
@TargetApi(Build.VERSION_CODES.HONEYCOMB)
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuItem item = menu.add(Menu.NONE, 0, 0, "Bearbeiten");
item.setIcon(R.drawable.content_edit);
if (android.os.Build.VERSION.SDK_INT >= 11) {
item.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS); //<-----
}
return super.onCreateOptionsMenu(menu);
}
@TargetApi(Build.VERSION\u CODES.HONEYCOMB)
@凌驾
公共布尔onCreateOptions菜单(菜单){
MenuItem item=menu.add(menu.NONE,0,0,“Bearbeiten”);
item.setIcon(R.drawable.content\u edit);
如果(android.os.Build.VERSION.SDK_INT>=11){
item.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);//什么是getmenutofluate()
return?它返回应该保存这些菜单项的上下文菜单的id。(“R.menu.somecontextmenu”)
@TargetApi(Build.VERSION_CODES.HONEYCOMB)
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuItem item = menu.add(Menu.NONE, 0, 0, "Bearbeiten");
item.setIcon(R.drawable.content_edit);
if (android.os.Build.VERSION.SDK_INT >= 11) {
item.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS); //<-----
}
return super.onCreateOptionsMenu(menu);
}