如何在单击按钮后禁用菜单中的项目?

时间:2017-05-26 20:12:52

标签: android button menu

public class MainActivity extends AppCompatActivity {


    private final int item_4 = 4;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Button btn = (Button) findViewById(R.id.btn);
        btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                onPrepareOptionsMenu();
            }
        });


    }


    @Override
    public boolean onCreateOptionsMenu(Menu menu) {


        MenuInflater mi = getMenuInflater();
        mi.inflate(R.menu.menu_main, menu);


        menu.add(Menu.NONE, item_4, Menu.NONE, "Show");

       menu.add(Menu.NONE, item_4, Menu.NONE, "Hide");


        menu.add("Reset");




        return true;

    }


    @Override
    public boolean onOptionsItemSelected(MenuItem item) {




        switch (item.getItemId()) {
            case R.id.item1:

                Toast.makeText(this, "You Pressed Settings", Toast.LENGTH_SHORT).show();
                return true;


            case R.id.item2:
                Toast.makeText(this, "You Pressed Create", Toast.LENGTH_SHORT).show();
                return true;

            case R.id.item3:
                Toast.makeText(this, "You Pressed Delete", Toast.LENGTH_SHORT).show();
                return true;


            case item_4:
                Toast.makeText(this, "You Pressed Hide", Toast.LENGTH_SHORT).show();
                return true;

            default:
                return super.onOptionsItemSelected(item);

        }
    }

    @Override
    public boolean onPrepareOptionsMenu(Menu menu) {
        MenuItem mii = menu.findItem(R.id.item2);
        mii.setEnabled(false);


        return super.onPrepareOptionsMenu(menu);
    }
}

在上面的代码中我创建了一个应用栏的菜单项列表,我在我的应用程序中创建了一个按钮,我希望我的一些项目在按钮点击后被禁用但我不能这样做,因为我我不是gettig如何在按钮点击时调用onPrepareOptionsMenu()?任何人都可以建议一个解决方案,如何在按钮点击后禁用菜单项?

2 个答案:

答案 0 :(得分:0)

我将展示简短的例子:

此方法只有一个注释:不要忘记在每个方法开始时清除菜单项(menu.clear();)。

示例:

import android.app.Activity;

import android.os.Bundle;

import android.view.Menu;

import android.view.View;

import android.view.View.OnClickListener;

import android.widget.Button;

/**

* Class which shows how to change dynamically options menu items

*/

public class Main extends Activity {

private Button clickBtn;

private boolean isChangedStat = false;

private static final int MENUITEM = Menu.FIRST;

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

clickBtn = (Button) findViewById(R.id.click);

clickBtn.setText("Click me");

clickBtn.setOnClickListener(new OnClickListener() {

@Override

public void onClick(View v) {

if(isChangedStat) {

isChangedStat = false;

} else {

isChangedStat = true;

}

}

});

}

@Override

public boolean onPrepareOptionsMenu(Menu menu) {

menu.clear();

if(isChangedStat) {

menu.add(0, MENUITEM, 0, "True");

} else {

menu.add(0, MENUITEM, 0, "False");

}

return super.onPrepareOptionsMenu(menu);

}

}

答案 1 :(得分:0)

参考来自: Android: How to enable/disable option menu item on button click?

  

创建活动后,onCreateOptionsMenu()方法就是   如上所述,只召唤一次。系统保留并重新使用   您在此方法中定义的菜单,直到您的活动被销毁。如果   您想在首次创建后随时更改选项菜单,   你必须覆盖onPrepareOptionsMenu()方法。这传递给你   当前存在的Menu对象。如果您愿意,这很有用   删除,添加,禁用或启用菜单项取决于当前   申请状态。

你可以调用方法invalidateOptionsMenu();在按钮的点击监听器中。它会再次调用onPrepareOptionsMenu(),所有你要禁用的逻辑都可以写在这里。

无论如何,documents涵盖所有。