2016-07-19 11 views
0

我想從onClick監聽器中的ImageButton調用optionMenu,但得到以下異常。從ImageButton的OpenOptionMenu給出空指針異常

07-19 01:08:09.693: E/AndroidRuntime(15133): java.lang.NullPointerException: Attempt to invoke interface method 'android.view.MenuItem android.view.Menu.getItem(int)' on a null object reference 


    public class myApp extends Activity implements OnClickListener { 

     @Override 
     public void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 

      requestWindowFeature(Window.FEATURE_CUSTOM_TITLE); 

     } 

    /** Called when the activity is first created. */ 
    @Override 
    public void onPostCreate(Bundle savedInstanceState) { 
     super.onPostCreate(savedInstanceState); 

     setContentView(R.layout.main); 

     getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE, R.layout.window_title); 

     menu_icon = (ImageView) findViewById(R.id.icon); 
     infoBtn = (ImageButton) findViewById(R.id.pfkey_button); 
     menu_icon.setImageResource(R.drawable.info_icon); 

     menu_icon.setOnClickListener(this); 
     infoBtn.setOnClickListener(this); 

     //Create Terminal View 
     terminalView = (TerminalView)findViewById(R.id.terminalView);//new TerminalView(this);  

     registerForContextMenu(terminalView); 

    } 


    public void onClick(View v) { 


      KeyEvent event = null; 

      if (v == infoBtn) { 
       openOptionsMenu(); 
      } 

      if (v == menu_icon) { 
       openOptionsMenu(); 
      } 

     } 

} 

我還試圖用`infoBtn =(的ImageButton)myApp.this.findViewById(R.id.pfkey_button);但不工作

+0

請張貼您的完整代碼,以便我們能夠理解流程。直到那時,看看這個教程,可能會有所幫助:http://www.javatpoint.com/android-option-menu-example – Kushan

+0

確保覆蓋onCreateOptionsMenu(菜單菜單)並首先膨脹菜單,然後使用onOptionsItemSelected( MenuItem項目)來選擇一個項目 – Kushan

+0

在android選項菜單是出現在您的工具欄內的東西。你在找那個嗎?還有一件事叫做PopupMenu,也許這就是你以後的... – Kushan

回答

0

確保第一膨脹內onCreateOptionsMenu你的菜單()

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    // Inflate the navigation_menu; this adds items to the action bar if it is present. 
    getMenuInflater().inflate(R.menu.your_menu, menu); 
    return true; 
} 

這可能是你的菜單本身不膨脹,從而導致異常。請提供完整的代碼,如果這是不是我不知道爲什麼你overrided onPostCreate的情況下

+0

是的,我正在充氣。 – user366584

1

,我想你shold做這些事情在的onCreate

除此之外,openOptionsMenu不適用於我的應用程序。

於是我就用一個工具欄更換動作條。這裏是代碼:

public class MainActivity extends AppCompatActivity { 
    private static final String TAG = "MainActivity"; 
    private Toolbar mToolbar; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     mToolbar = (Toolbar) findViewById(R.id.toolbar); 
     setSupportActionBar(mToolbar); 
     findViewById(R.id.button).setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       mToolbar.showOverflowMenu(); 
      } 
     }); 
    } 

    // override this method to inflat the menu 
    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     getMenuInflater().inflate(R.menu.menu, menu); 
     return true; 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     Log.d(TAG, "onOptionsItemSelected: "+item.getTitle().toString()); 
     return super.onOptionsItemSelected(item); 
    } 
} 
0

這裏被撞毀雖然實施是正確的。

@Override 
    public boolean onMenuOpened(int featureId, Menu menu) { 

     /*if (!hostcom.isConnected()) 
      menu.getItem(0).setTitle("Login"); 
     else 
      menu.getItem(0).setTitle("Logout");*/ 

     return true; 

    }