Android menuitem onclick处理程序的返回值

Ani*_*n J 6 android android-listview

在android中我在xml中定义了menuitem的onclick处理程序

<item
    android:id="@+id/context_menu"
    android:orderInCategory="100"
    android:showAsAction="never"
    android:title="@string/word_context_menu_title"
    android:onClick="deleteItem"/>
Run Code Online (Sandbox Code Playgroud)

在相应的活动中,我使用以下签名定义了一个函数deleteItem.

public boolean deleteItem(MenuItem item){
    logger.info("delete button clicked");
    return false;
}
Run Code Online (Sandbox Code Playgroud)

我的问题是返回值表示什么?在哪种情况下我应该返回true,在哪种情况下我应该返回false?

sin*_*hum 6

什么boolean返回值从文档意味着onMenuItemClick:

返回true以消耗此单击并阻止其他人执行.

这里onOptionsItemSelected与答案类似的行为.如果我理解正确,这意味着无论何时成功处理事件,都应该返回.true


这是一个例子.

说你有你的deleteItemonOptionsItemSelected.

public boolean deleteItem(MenuItem item){
    Log.v("test", "delete button clicked");
    return false;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId())
    {
        case R.id.context_menu:
            Log.v("test","onOptionsItemSelected");
            return true;
        default:
            return super.onOptionsItemSelected(item);
    }
}
Run Code Online (Sandbox Code Playgroud)

如果你回来false,deleteItem你会看到它也被处理了onOptionsItemSelected.

>单击删除按钮
> onOptionsItemSelected

如果返回truedeleteItem将不再办理onOptionsItemSelected.

>点击删除按钮

另请注意,您的deleteItem句柄可以是一个void方法,它将根据此处的源代码自动返回true .