Android - MenuItem onOptionsItemSelected方法不起作用但返回没有错误

时间:2015-11-21 15:45:55

标签: java android menu menuitem

我对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>

3 个答案:

答案 0 :(得分:4)

这样做,它更容易:

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

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

答案 1 :(得分:1)

始终比较项ID而不是标题或其他内容,就像在另一个答案中一样。

另一种不错的方法:尝试通过onPrepareOptionsMenu函数中的p2处理点击事件。示例代码如下:

OnMenuItemClickListener

答案 2 :(得分:1)

你说

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

    if (selectedMenuIdString.equals("about")) {

并且看起来像这里的about菜单项没有浓缩标题

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

所以修改你的代码如:

@Override
public boolean onOptionsItemSelected(MenuItem item) {

    switch(item.getItemId()) {
        case R.id.about:{
            //do something here
            return true;
            break;
        }
        case R.id.search:{
            //do something here
            return true;
            break;
        }
        case R.id.contact_us:{
            //do something here
            return true;
            break;
        }
        case R.id.products:{
            //do something here
            return true;
            break;
        }
    }
    return super.onOptionsItemSelected(item);
}