2017-05-26 14 views
0
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); 
    } 
} 

上記のコードでは、アプリケーションバーのメニュー項目リストを作成しました。アプリでボタンを作成しましたが、ボタンをクリックした後でアイテムの一部を無効にしたいのですが、できません。私はボタンクリックでonPrepareOptionsMenu()を呼び出す方法をgettigしていないので?誰もボタンをクリックした後、メニュー項目を無効にする方法のためのソリューションを提案することはできますか?ボタンをクリックした後、メニューの項目を無効にする方法はありますか?

答えて

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

 
} 
 

 
}

0

リファレンス: Android: How to enable/disable option menu item on button click?

アクティビティが作成されると上述したように、onCreateOptionsMenu()メソッドは、一度だけ呼び出さ あります。システムは、アクティビティが破棄されるまでこのメソッドで定義した メニューを保持して再利用します。 最初に作成した後でいつでもオプションメニューを変更したい場合は、 をonPrepareOptionsMenu()メソッドでオーバーライドする必要があります。これにより、現在存在するMenuオブジェクト が渡されます。これは、現在の アプリケーションの状態に応じて、 にメニュー項目を削除、追加、無効化、または有効にしたい場合に便利です。

あなたはinvalidateOptionsMenu()メソッドを呼び出すことができます。ボタンのクリックリスナーでそれはonPrepareOptionsMenu()をもう一度呼び出すと、無効にするすべてのロジックをここに書き込むことができます。

とにかく、documentsはすべてをカバーします。

関連する問題