web-dev-qa-db-ja.com

メニュー項目クリックイベントの処理-Android

メニュー項目をクリックすると新しいアクティビティを開始するインテントを作成したいのですが、どうすればいいのかわかりません。私はAndroidのドキュメントを読んでいますが、私の実装は正しくありません。正しい方向のガイダンスが役立つでしょう。以下にコードをリストし、問題のある領域をコメントアウトしました。間違ったメソッドを呼び出していると思います。

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

}
106
Jade Byfield

メニューを作成するための簡単なコード..

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

選択されたメニューの簡単なコード

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

詳細については、以下のリンクをご覧ください。

Link1

Link2

258
Niranj Patel

次のコードを追加

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

メニュー項目ファイルは次のようになります

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コードは次のようになります

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

そして、次のコードをAndroidManifest.xmlファイルに追加します

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

それがあなたのお役に立てば幸いです。

5

このコードは私のために働いています

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

質問に示されているオプションに加えて、次の例のように、メニューからxmlファイルにアクションを直接実装する可能性があります。

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

また、Java(アクティビティ)ファイルの場合、MenuItem型の単一のパラメーターを使用してpublicメソッドを実装する必要があります。次に例を示します。

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

注:このメソッドは、onOptionsItemSelected(MenuItemアイテム)と同様の動作をします

0
Jackson.Roberio