java - mend.findItem解释和困惑

标签 java android

我是 Android 开发新手,对 Java 也有点陌生。 我正在学习如何向操作栏添加按钮 - 一切正常,但我不明白一些事情。

//Showing small icons at actionbar
@Override
public boolean onCreateOptionsMenu(Menu menu){
    MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.menu.main, menu);
    menuItem = menu.findItem(R.id.recBin); // Finds the button in Actionbar and gets the ID
    return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {

    switch (item.getItemId()) {
        case R.id.recBin: // Actions for delete button
            dbHandler.remove(getID());
            displayTaskList();
            menuItem.setVisible(false); // Hide the button
            break;
        case R.id.editBtn: // Actions for editbutton

            Toast.makeText(MainActivity.this,
                    "EDIT", Toast.LENGTH_LONG).show();

            break;
        case R.id.closeBtn:  

            Toast.makeText(MainActivity.this,
                    "CLOSE", Toast.LENGTH_LONG).show();

            break;
        default:
            break;
    }

    return true;
}

这一行:menuItem = menu.findItem(R.id.recBin);究竟是为了什么呢?我把它取下来,我的应用程序崩溃了,所以我知道这是强制性的。我不明白的是我应该将什么图标 ID 放在粗体空间中?它必须来自“菜单”,但是我采用哪个 id 有关系吗?例如,如果我采用 R.id.closeBtn 而不是 recBin?只要是菜单中的 id 就可以吗? 附:我希望这不是一个可怕的问题(可能是),如果是这样,我很抱歉。

解决方案: 事实证明,您可以简单地获取 ID。愚蠢而简单。

private                 MenuItem                item1, item2, item3;

//Showing small icons at actionbar
@Override
public boolean onCreateOptionsMenu(Menu menu){

    MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.menu.main, menu);

    item1 = menu.findItem(R.id.recBin); // Rec button
    item2 = menu.findItem(R.id.editBtn); // Edit button
    item3 = menu.findItem(R.id.closeBtn); // Close button

    return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
    case R.id.recBin: // Actions for delete button
        dbHandler.remove(getID());
        displayTaskList();
        item1.setVisible(false); item2.setVisible(false); item3.setVisible(false);             // Hiding all buttons
        break;
    case R.id.editBtn: // Actions for editbutton

        item1.setVisible(false); item2.setVisible(false); item3.setVisible(false);             // Hiding all buttons
        break;
    case R.id.closeBtn:
        item1.setVisible(false); item2.setVisible(false); item3.setVisible(false);             // Hiding all buttons
        break;
    default:
        break;
}
return true;
}

最佳答案

这是对 MenuItem 的引用,但如果这样做会更容易:

case R.id.recBin: // Actions for delete button
        dbHandler.remove(getID());
        displayTaskList();
        item.setVisible(false); // Hide the button
        break;

之后您可以安全地删除引用

关于java - mend.findItem解释和困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40474514/

相关文章:

java - 如何将变量传递给 Runnable?

java - Java 中最接近嵌套字典(python)的东西是什么?

java - 如何使用 Html 单元和 Xpath 获取段落元素

java - Java Web 应用程序中的不安全对象引用

android - 将 NFC 标签限制为仅限应用程序 (Android)

android - 通过更改 Android 中的应用程序语言来更改默认手机语言?

Android:AsyncTask 的处理程序

java - 为什么重新排列导入会导致编译失败?

android - 如何向Android客户部署Titanium项目?

android - OpenGL ES 2.0 无法编译着色器 Android