Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/333.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
Java Android-MenuItem OnOptions ItemSelected方法不工作但不返回任何错误_Java_Android_Menu_Menuitem - Fatal编程技术网

Java Android-MenuItem OnOptions ItemSelected方法不工作但不返回任何错误

Java Android-MenuItem OnOptions ItemSelected方法不工作但不返回任何错误,java,android,menu,menuitem,Java,Android,Menu,Menuitem,我对android开发相对较新,一直在尝试了解MenuItem,但没有取得太大成功。单击菜单项时调用方法时遇到问题。这是我的密码: @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.main, menu); return true; } @Override public boolean onOptionsItemSelected(MenuI

我对android开发相对较新,一直在尝试了解MenuItem,但没有取得太大成功。单击菜单项时调用方法时遇到问题。这是我的密码:

    @Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.main, menu);
    return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    String selectedMenuIdString = (String) item.getTitleCondensed();

    if (selectedMenuIdString.equals("about")) {
        doThis(item);
        return true;
    }
    return true;
}

public void doThis(MenuItem item) {
    Toast.makeText(this, "Hello World", Toast.LENGTH_LONG).show();
}
几天前它曾经工作过,但现在不行了,我不知道为什么。有人能帮忙吗

<item
    android:id="@+id/search"
    android:orderInCategory="100"
    android:title="@string/search"
    android:titleCondensed="search"
    />
 <item
    android:id="@+id/products"
    android:orderInCategory="100"
    android:title="@string/products"/>
<item
    android:id="@+id/contact_us"
    android:orderInCategory="100"
    android:title="@string/contactus"/>
<item
    android:id="@+id/about"
    android:orderInCategory="100"
    android:title="@string/about"/>

还有我的琴弦:

<string name="search">Search</string>
<string name="products">Products</string>
<string name="contactus">Contact Us</string>
<string name="about">About</string>
搜索
产品
联系我们
关于

这样做更容易:

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    int id = item.getId(); // Retrieve the id of the selected menu item

    switch(id) {
        case R.id.about: // "@+id/about" is the id of your menu item (menu layout)
            doThis(item);
            return true;
            break;
        case ...
    }
    return super.onOptionsItemSelected(item);
}

没有监听器,没有额外的复杂性。

这样做更容易:

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    int id = item.getId(); // Retrieve the id of the selected menu item

    switch(id) {
        case R.id.about: // "@+id/about" is the id of your menu item (menu layout)
            doThis(item);
            return true;
            break;
        case ...
    }
    return super.onOptionsItemSelected(item);
}

没有听众,没有额外的复杂性。

始终比较项目id,而不是标题或其他内容,如其他答案

另一种很好的方法是:尝试通过onPrepareOptions菜单函数中的
OnMenuItemClickListener
处理单击事件。示例代码如下:

@Override
public boolean onPrepareOptionsMenu(Menu menu) {

       MenuItem prefs = menu.findItem(R.id.prefs); // your item identifier
       prefs.setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() {
            @Override
            public boolean onMenuItemClick(MenuItem item) {
                doThis();
                return false;
            }
        });
}

始终比较项目id,而不是标题或其他内容,如其他答案

另一种很好的方法是:尝试通过onPrepareOptions菜单函数中的
OnMenuItemClickListener
处理单击事件。示例代码如下:

@Override
public boolean onPrepareOptionsMenu(Menu menu) {

       MenuItem prefs = menu.findItem(R.id.prefs); // your item identifier
       prefs.setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() {
            @Override
            public boolean onMenuItemClick(MenuItem item) {
                doThis();
                return false;
            }
        });
}
你说

String selectedMenuIdString = (String) item.getTitleCondensed();

    if (selectedMenuIdString.equals("about")) {
这里的“关于”菜单项似乎没有一个浓缩标题

<item
    android:id="@+id/about"
    android:orderInCategory="100"
    android:title="@string/about"/>
你说

String selectedMenuIdString = (String) item.getTitleCondensed();

    if (selectedMenuIdString.equals("about")) {
这里的“关于”菜单项似乎没有一个浓缩标题

<item
    android:id="@+id/about"
    android:orderInCategory="100"
    android:title="@string/about"/>