Bir Menü Öğesi Tıklama Olayını Yönetme - Android


123

Bir Menü Öğesine tıklandığında yeni bir etkinlik başlatan bir amaç oluşturmak istiyorum, ancak bunu nasıl yapacağımı bilmiyorum. Android belgelerini okudum, ancak uygulamam doğru değil ... ve doğru yöndeki bazı rehberlik yardımcı olabilir. Kodumu aşağıda listeledim ve sorun alanlarımı yorumladım, sanırım yanlış yöntemi çağırıyorum.

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

}

Yanıtlar:


298

menü oluşturmak için basit kod ..

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

seçilen menü için basit kod

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

daha fazla ayrıntı için aşağıdaki bağlantıya gidin ..

link1

link2


Bunu XML'e koyarsam android: onClick özniteliği bu durumda çalışmaz mı? (Burada çok acemi Android programcısı)
FateNuller

@FateNuller XML içinde seçenekler menüsü için onClick çalışmaz, düzenler için çalışır. OnOptionsItemSelected içindeki eylem çubuğu seçeneği menüsü tıklamalarını işlemelisiniz.
Marko

Sabit ifade gerekli. Kaynak kimlikleri daha az Android kitaplık modüllerinde bir anahtar deyiminde kullanılamaz ... Android kitaplık modülündeki bir anahtar deyimindeki kaynak kimliklerini kullanarak doğrular. Kaynak kimlikleri kitaplık projelerinde nihai değildir, çünkü SDK araçları r14, kitaplık kodunun bu kimlikleri sabitler olarak değerlendiremeyeceği anlamına gelir.
Zon

13

Aşağıdaki Kodu Ekle

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

5

Menü öğeleri dosyası şöyle görünüyor

res / menü / 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 kodu şöyle görünüyor

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

Ve AndroidManifest.xml dosyanıza aşağıdaki kodu ekleyin

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

Umarım bu sana yardımcı olur.


3

Bu kod benim için çalışıyor

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

1

Sorunuzda gösterilen seçeneklere ek olarak, eylemi doğrudan menüden xml dosyanıza uygulama imkanı vardır, örneğin:

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

Ve Java (Etkinlik) dosyanız için, tek bir parametre türü MenuItem ile genel bir yöntem uygulamanız gerekir, örneğin:

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

NOT: Bu yöntem, onOptionsItemSelected (MenuItem öğesi) ile benzer davranışa sahip olacaktır.


0

Şu şekilde değiştirin onOptionsItemSelected:

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

Buradan şuraya DashboardActivity gitmek istiyorum SettingActivity.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.