0

Я пытаюсь вызвать optionMenu из ImageButton в onClick-слушателе, но получаю следующее исключение.OpenOptionMenu from ImageButton дает исключение нулевого указателя

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

Вполне возможно, что само ваше меню не завышены, тем самым вызывая исключение. Просьба предоставить полный код, если это не так

+0

Да, я раздуваю. – user366584

1

Я не знаю, почему вы перекрытая onPostCreate, я думаю, что вы shold делать те вещи, в OnCreate.

Кроме этого, openOptionsMenu не работает в моем приложении.

Так я использую ToolBar заменить ActionBar .Здесь есть код:

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; 

    }