Android menuitem onclick处理程序的返回值

时间:2014-04-19 13:34:25

标签: 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"/>

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

public boolean deleteItem(MenuItem item){
    logger.info("delete button clicked");
    return false;
}

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

1 个答案:

答案 0 :(得分:6)

boolean返回值的含义来自onMenuItemClick的文档:

  

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

onOptionsItemSelected的行为类似,回答为here。如果我理解正确,这意味着无论何时成功处理事件,都应该返回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);
    }
}

如果您在false中返回deleteItem,则会看到它也会在onOptionsItemSelected中处理。

  

&gt;点击删除按钮
  &GT; onOptionsItemSelected

如果您在true中退回deleteItem,将无法再在onOptionsItemSelected中处理。

  

&gt;点击删除按钮

另请注意,您的deleteItem句柄可以是void方法,并且会根据源代码here自动返回true。