Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-cloud-platform/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android和菜单_Android_Menuitem - Fatal编程技术网

Android和菜单

Android和菜单,android,menuitem,Android,Menuitem,我是一个有经验的Java程序员。我开始从事一个小型的Android项目,我对Android为了更加灵活而复杂的编程感到非常失望。 确切地说,我的问题如下:我有一个菜单项,我需要在mu应用程序的几个菜单中使用。有没有一种方法可以创建一个菜单项对象(可能会将某个函数与之关联),并将其传递给其他活动,以便任何活动都可以将其添加到自己的contex菜单中 我试过这个: 创建了一个“res.menu.mymenu.xml”文件,其中包含一个与另一个“res.menu.mymenu2.xml”文件中的菜单项

我是一个有经验的Java程序员。我开始从事一个小型的Android项目,我对Android为了更加灵活而复杂的编程感到非常失望。 确切地说,我的问题如下:我有一个菜单项,我需要在mu应用程序的几个菜单中使用。有没有一种方法可以创建一个菜单项对象(可能会将某个函数与之关联),并将其传递给其他活动,以便任何活动都可以将其添加到自己的contex菜单中

我试过这个: 创建了一个“res.menu.mymenu.xml”文件,其中包含一个与另一个“res.menu.mymenu2.xml”文件中的菜单项id相同的菜单项。然后我试过这个:

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);
}