如何为Android MenuItems设置切换。单击另一个时如何显示一个?

问题描述 投票:0回答:1

我有一个笔记记录活动,我希望能够编辑和保存(基本上覆盖)相同的笔记。

一旦我点击编辑MenuItem,我希望它隐藏,然后显示保存MenuItem。

我可以让编辑MenuItem不可见,但我无法显示保存MenuItem。我一直得到一个空指针异常。

这是我的edit_question_menu.xml

 <?xml version="1.0" encoding="utf-8"?>
 <menu xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto">
    <item
        android:id="@+id/edit_question"
        android:icon="@drawable/ic_edit_black_24dp"
        android:title="Edit"
        app:showAsAction="ifRoom"
        android:visible="true">
    </item>

    <item
        android:id="@+id/save_question"
        android:icon="@drawable/ic_save_black_24dp"
        android:title="Edit"
        app:showAsAction="ifRoom"
        android:visible="false">
    </item>
</menu>

activity.java文件

@Override
    public boolean onCreateOptionsMenu(Menu menu) {
        MenuInflater menuInflater = getMenuInflater();
        menuInflater.inflate(R.menu.edit_question_menu, menu);
        MenuItem itemSave = menu.findItem(R.id.save_question);
        itemSave.setVisible(false);
        return super.onCreateOptionsMenu(menu);
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {

            case R.id.save_question:
                saveQuestion();
                return true;

            case R.id.edit_question:
                item.setVisible(false);

//                MenuItem save_Question_MenuItem = findViewById(R.id.save_question);
//                save_Question_MenuItem.setVisible(true);
                enableEditMode();
                return true;
            default:
                return super.onOptionsItemSelected(item);
        }
    }

    private void enableEditMode(){
        MenuItem saveButton = findViewById(R.id.save_question);
        getSupportActionBar().setHomeAsUpIndicator(R.drawable.ic_close_black_24dp);
        questionEditText = findViewById(R.id.questionEditTextID);
        mPostAnswerButton.setEnabled(false);
        mPostAnswerButton.setBackgroundColor(getResources().getColor(android.R.color.darker_gray));

        mCommentButton.setEnabled(false);
        mCommentButton.setBackgroundColor(getResources().getColor(android.R.color.darker_gray));

        saveButton.setVisible(true); **ERROR HAPPENS HERE**
    }

任何和所有的帮助表示赞赏。这似乎相当简单,但我找不到一种方法让它工作。

android menuitem android-menu
1个回答
1
投票
  1. 在您的活动中添加标记,指示save MenuItem应该在哪里可见:
private boolean mShowSaveIcon
  1. 覆盖onPrepareOptionsMenu(更新):
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
    MenuItem item = menu.findItem(R.id.save_question);
    item.setVisible(mShowSaveIcon);

    menu.findItem(R.id.edit_question).setVisible(!mShowSaveIcon);  // you can use negation of the same flag if one and only one of two menu items is visible; or create more complex logic

    return true;
}
  1. 在单击处理程序中,更改标志值并请求失效:
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {

            case R.id.save_question:
                mShowSaveIcon = false;
                break;

            case R.id.edit_question:
                item.setVisible(false);
                enableEditMode();
                mShowSaveIcon = true;
                break;
         }
         invalidateOptionsMenu();
         return true;
    }
  1. 变更交易:
 private void enableEditMode(){
        /// MenuItem saveButton = findViewById(R.id.save_question); // <--- NO THIS LINE
        getSupportActionBar().setHomeAsUpIndicator(R.drawable.ic_close_black_24dp);
        questionEditText = findViewById(R.id.questionEditTextID);
        mPostAnswerButton.setEnabled(false);
        mPostAnswerButton.setBackgroundColor(getResources().getColor(android.R.color.darker_gray));

        mCommentButton.setEnabled(false);
        mCommentButton.setBackgroundColor(getResources().getColor(android.R.color.darker_gray));
       /// saveButton.setVisible(true); **ERROR HAPPENS HERE** // <--- NO THIS LINE
    }
© www.soinside.com 2019 - 2024. All rights reserved.