Behandeln eines Menüelements Klicken Sie auf Ereignis - Android

122

Ich möchte eine Absicht erstellen, die eine neue Aktivität startet, sobald auf ein Menüelement geklickt wird, bin mir jedoch nicht sicher, wie ich dies tun soll. Ich habe die Android-Dokumentation gelesen, aber meine Implementierung ist nicht korrekt. Eine Anleitung in die richtige Richtung würde helfen. Ich habe meinen Code unten aufgelistet und meine Problembereiche auskommentiert. Ich glaube, ich rufe die falsche Methode auf.

package com.jbsoft.SimpleFlashlight;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.*;
import android.view.MenuItem.OnMenuItemClickListener;
import android.widget.Button;
import android.widget.Toast;

public class SimpleFlashLightActivity extends Activity {


  Button GreenButton;   // Declare instances of buttons to use later
  Button BlueButton;

  private static final int OK_MENU_ITEM = Menu.FIRST;

  /** Called when the activity is first created. */
  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    BlueButton = (Button) findViewById(R.id.bluebutton);
    BlueButton.setOnClickListener(new View.OnClickListener() {

      public void onClick(View v) {

        //Display msg when user clicks Blue Button
        showColorChangeMsg();

        // Switch Activities on click
        Intent blueintent = new Intent(SimpleFlashLightActivity.this,
                                       BlueFlashLightActivity.class);
        startActivity(blueintent);

      }
    });
    //Install listener for second button
    GreenButton = (Button) findViewById(R.id.greenbutton);
    GreenButton.setOnClickListener(new View.OnClickListener() {

      public void onClick(View v) {

        // Display msg when user clicks Green Button
        showColorChangeMsg();

        Intent greenintent = new        Intent(SimpleFlashLightActivity.this,
                                               GreenFlashLightActivty.class);
        startActivity(greenintent);

      }
    });

    ;

    /**************************************************************************************/

    // Method Declarations // THIS IS WHERE I'M HAVING A PROBLEM

    MenuItem AddColorButton = (MenuItem)findViewById(R.id.menu_insert);

    boolean onOptionsItemSelected(AddColorButton) {
      Intent intent = new  Intent(SimpleFlashLightActivity.this,
                                  BlueFlashLightActivity.class);
      startActivity(intent);
      return true;
      ;
    };
    /****************************************************************************************/

  }
  private void showColorChangeMsg()
  {
    Toast msgtoast = Toast.makeText(this.getBaseContext(), "SWITCH COLOR!",
                                    Toast.LENGTH_LONG);
    msgtoast.show();
  }
  private void showMsg(String msg) {
    Toast toast = Toast.makeText(this, msg, Toast.LENGTH_LONG);
    toast.show();
  }

  public boolean onCreateOptionsMenu(Menu menu) {
    super.onCreateOptionsMenu(menu);
    MenuInflater mi = getMenuInflater();
    mi.inflate(R.menu.list_menu, menu);
    return true;

  }

  @Override
  public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
    case OK_MENU_ITEM:
      showMsg("OK");
      break;
    }
    return super.onOptionsItemSelected(item);
  }

}
Jade Byfield
quelle

Antworten:

297

einfacher Code zum Erstellen eines Menüs ..

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.menu.game_menu, menu);
    return true;
}

einfacher Code für ausgewähltes Menü

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    // Handle item selection
    switch (item.getItemId()) {
    case R.id.new_game:
        newGame();
        return true;
    case R.id.help:
        showHelp();
        return true;
    default:
        return super.onOptionsItemSelected(item);
    }
}

Für mehr Details gehen Sie unter Link ..

Link1

Link2

Niranj Patel
quelle
Funktioniert das android: onClick-Attribut in diesem Fall nicht, wenn ich es in das XML einfügen würde? (Sehr Anfänger Android-Programmierer hier)
FateNuller
@FateNuller onClick in XML für Optionsmenü würde nicht funktionieren, es würde für Layouts funktionieren. Sie sollten die Optionsmenü-Klicks in der Aktionsleiste in onOptionsItemSelected verarbeiten.
Marko
Konstanter Ausdruck erforderlich. Ressourcen-IDs können in einer switch-Anweisung in Android-Bibliotheksmodulen nicht weniger verwendet werden ... Überprüft die Verwendung von Ressourcen-IDs in einer switch-Anweisung in einem Android-Bibliotheksmodul. Ressourcen-IDs sind in den Bibliotheksprojekten nicht endgültig, da die SDK-Tools r14 bedeuten, dass der Bibliothekscode diese IDs nicht als Konstanten behandeln kann.
Zon
13

Fügen Sie den folgenden Code hinzu

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
    case R.id.new_item:
        Intent i = new Intent(this,SecondActivity.class);
            this.startActivity(i);
            return true;
    default:
        return super.onOptionsItemSelected(item);
    }
}
Halbmond
quelle
5

Die Menüelementdatei sieht aus wie

res / menu / menu_main.xml

<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    tools:context=".MainActivity">
    <item
        android:id="@+id/settings"
        android:title="Setting"
        app:showAsAction="never" />
    <item
        android:id="@+id/my_activity"
        android:title="My Activity"
        app:showAsAction="always"
        android:icon="@android:drawable/btn_radio"/>
</menu>

Java-Code sieht aus wie

src / MainActivity.java

@Override
    public boolean onCreateOptionsMenu(Menu menu) {
present.
        getMenuInflater().inflate(R.menu.menu_main, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        int id = item.getItemId();

      if (id == R.id.my_activity) {
            Intent intent1 = new Intent(this,MyActivity.class);
            this.startActivity(intent1);
            return true;
        }

        if (id == R.id.settings) {
            Toast.makeText(this, "Setting", Toast.LENGTH_LONG).show();
            return true;
        }

        return super.onOptionsItemSelected(item);
    }

Fügen Sie Ihrer AndroidManifest.xml-Datei folgenden Code hinzu

<activity
            android:name=".MyActivity"
            android:label="@string/app_name" >
        </activity>

Ich hoffe es hilft dir.

Pacific P. Regmi
quelle
3

Dieser Code ist Arbeit für mich

@Override
public boolean onOptionsItemSelected(MenuItem item) {

    int id = item.getItemId();

     if (id == R.id.action_settings) {
  // add your action here that you want
        return true;
    }

    else if (id==R.id.login)
     {
         // add your action here that you want
     }


    return super.onOptionsItemSelected(item);
}
Basant
quelle
1

Zusätzlich zu den in Ihrer Frage gezeigten Optionen besteht die Möglichkeit, die Aktion direkt in Ihrer XML-Datei über das Menü zu implementieren, zum Beispiel:

<item
   android:id="@+id/OK_MENU_ITEM"
   android:onClick="iraActivitySobre" />

Und für Ihre Java-Datei (Aktivitätsdatei) müssen Sie eine öffentliche Methode mit einem einzelnen Parameter vom Typ MenuItem implementieren, zum Beispiel:

 private void showMsgDirectMenuXml(MenuItem item) {
    Toast toast = Toast.makeText(this, "OK", Toast.LENGTH_LONG);
    toast.show();
  }

HINWEIS: Diese Methode verhält sich ähnlich wie das onOptionsItemSelected (MenuItem-Element).

Jackson.Roberio
quelle
0

Ersetzen Sie Ihre onOptionsItemSelectedals:

  @Override
          public boolean onOptionsItemSelected(MenuItem item) {
            switch (item.getItemId()) {
              case OK_MENU_ITEM:
                 startActivity(new Intent(DashboardActivity.this, SettingActivity.class));
                 break;

            // You can handle other cases Here.
              default: 
                 super.onOptionsItemSelected(item);
            }
          }

Hier will ich von navigieren DashboardActivity zu SettingActivity.

Dinesh Kc
quelle