2016-07-19 28 views
0

Ich versuche, OptionMenu von ImageButton in OnClick Listener aber die folgende Ausnahme zu erhalten.OpenOptionMenu von ImageButton gibt Nullzeigerausnahme

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

     } 

} 

ich auch versucht, mit `infoBtn = (Image) myApp.this.findViewById (R.id.pfkey_button); aber nicht funktioniert

+0

Bitte posten Sie Ihren vollständigen Code, damit wir den Ablauf verstehen können. Bis dann, werfen Sie einen Blick auf dieses Tutorial, könnte helfen: http://www.javatpoint.com/android-option-menu-example – Kushan

+0

stellen Sie sicher onCreateOptionsMenu (Menü Menü) zu überschreiben und das Menü zuerst aufblasen und dann onOptionsItemSelected (MenuItem-Element), um ein Element auszuwählen – Kushan

+0

In Android-Optionen-Menü ist etwas, das in Ihrer Symbolleiste angezeigt wird. suchst du das? Es gibt noch eine andere Sache namens PopupMenu, vielleicht ist es das, wonach du suchst ... – Kushan

Antwort

0

Stellen Sie sicher, Ihr Menü aufzublasen erste Innen 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; 
} 

Es ist möglich, dass Ihr Menü selbst nicht aufgeblasen wird, wodurch die Ausnahme verursacht. Bitte den vollständigen Code zur Verfügung stellen, wenn dies nicht der Fall ist

+0

Ja, ich blahle auf. – user366584

1

Ich weiß nicht, warum Sie overrided onPostCreate, ich glaube, Sie shold in onCreate diese Dinge zu tun.

Abgesehen davon funktioniert openOptionsMenu nicht in meiner App.

So verwende ich eine ToolBar die ActionBar .Hier ist der Code zu ersetzen:

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

hier es Absturz wurde, obwohl Implementierung korrekt ist.

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

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

     return true; 

    }