mend.findItem解释和混淆

时间:2016-11-07 21:00:30

标签: 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;
}

1 个答案:

答案 0 :(得分:0)

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

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

您可以安全地删除之后的参考