Come call Attività da una voce di menu in Android?

Sto tentando di call startActivity (myIntent) dal clic di un button di menu ma la mia applicazione si blocca a quel punto.

La stessa chiamata startActivity funziona bene da un semplice clic del button, quindi, suppongo che il button menu manca di informazioni sul context? O forse sono completamente fuori dal segno qui.

  • La barra degli strumenti è nascosta in PreferenceScreen nidificato
  • Applicazioni multiple con una base di codice condivisa
  • Problemi di condivisione di dati tra diverse applicazioni Android
  • Invia un'image da Android a un servizio Web ASP.NET
  • Come confrontare i numbers di telefono?
  • Aggiornamento progetto Gradle fallito. Android Studio
  • Quindi … qual è il modo corretto di avere una voce di menu che mi port a un'attività specifica?

    Ho riveduto il mio codice in base all'iniziale consiglio. Ancora in crisi nello stesso posto. Il debugger non inserisce la clausola dell'exception, l'applicazione appena muore.

    [EDITO CON CODICE SNIPPET]

    public boolean onCreateOptionsMenu(Menu menu) { MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.menu, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { // Handle item selection try{ switch (item.getItemId()) { case R.id.menuItemLang: startActivity(new Intent("com.my.project.SETTINGS")); return true; default: return super.onOptionsItemSelected(item); } }catch(Exception e){ log(e); } } 

    3 Solutions collect form web for “Come call Attività da una voce di menu in Android?”

    Prima opzione

    È necessario ignorare il metodo onOptionsItemSelected nell'attività, che viene chiamato quando l'utente fa clic sul menu Opzioni nel menu Opzioni. Nel metodo è ansible verificare l'elemento selezionato.

     @Override public boolean onOptionsItemSelected(MenuItem item) { switch(item.getItemId()) { case R.id.menu_item1: Intent intent = new Intent(this, ActivityForItemOne.class); this.startActivity(intent); break; case R.id.menu_item2: // another startActivity, this is for item with id "menu_item2" break; default: return super.onOptionsItemSelected(item); } return true; } 

    C'è anche il metodo onContextItemSelected che funziona similari, ma per il menu contestuale (non sono sicuro, quale menu intendiate).

    Ulteriori informazioni su http://developer.android.com/guide/topics/ui/menus.html

    EDIT:

    Seconda opzione

    Penso che la prima opzione sia più semplice, ma dal codice che vedo, che si desidera avviare l'attività come un'azione (a causa del parametro String nel constructor Intent ). A tale scopo, è necessario specificare un'azione nel tuo AndroidManifest.xml. Quindi, se avrei iniziato l'attività ActivityForItemOne (dall'esempio precedente), l'elemento <application> in AndroidManifest.xml sarebbe simile a questo:

     <application ...> ... <activity android:label="Activity For First Item" android:name=".ActivityForItemOne"> <intent-filter> <action android:name="my.app.ITEMONE" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </activity> </application> 

    E l' Intent sarà:

     Intent intent = new Intent("my.app.ITEMONE"); 

    Il my.app. è il pacchetto della tua applicazione. Non è necessario utilizzare il pacchetto di applicazioni, ma è consigliato per l'unicità delle azioni.

    Ulteriori informazioni a:

    Intent di class – costanti di azione e categoria

    Elemento di azione

    Intenti e filtri d'intenti

    Spero che questo risolva il tuo problema.

    Più ottimizzato:

     @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case R.id.item1: return true; case R.id.item2: return true; default: return super.onOptionsItemSelected(item); } } 

    se ci sono 2 Class 1 MainActivity 2 Benvenuti allora devi andare da welcom> MainActivity

    @Override public boolean onCreateOptionsMenu (Menu menu) {

      return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { switch(item.getItemId()) { case R.id.logout: Intent intent = new Intent(this, MainActivity.class); this.startActivity(intent); break; case R.id.settings: // another startActivity, this is for item with id "menu_item2" break; default: return super.onOptionsItemSelected(item); } return true; } 
    L'Android è un fan Android di Google, tutto su telefoni Android, Android Wear, Android Dev e applicazioni Android Games e così via.