【问题标题】:Android menuitem onclick handler's return valueAndroid menuitem onclick 处理程序的返回值
【发布时间】:2014-04-19 13:34:24
【问题描述】:

在 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?

【问题讨论】:

    标签: android android-listview


    【解决方案1】:

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

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

    >点击删除按钮
    >onOptionsItemSelected

    如果您在deleteItem 中返回true,它将不再在onOptionsItemSelected 中处理。

    >点击删除按钮

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

    【讨论】:

      猜你喜欢
      • 2021-08-08
      • 1970-01-01
      • 2011-11-20
      • 1970-01-01
      • 1970-01-01
      • 2022-06-14
      • 2019-08-27
      • 1970-01-01
      • 2011-05-17
      相关资源
      最近更新 更多