메뉴 항목 클릭 이벤트 처리-Android


123

메뉴 항목을 클릭하면 새 활동을 시작하는 인 텐트를 만들고 싶지만이 작업을 수행하는 방법을 모르겠습니다. 나는 안드로이드 문서를 읽었지만 내 구현이 정확하지 않으며 올바른 방향에 대한 지침이 도움이 될 것입니다. 아래에 내 코드를 나열하고 문제 영역에 주석을 달았습니다. 잘못된 메서드를 호출 한 것 같습니다.

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

}

답변:


297

메뉴 생성을위한 간단한 코드 ..

@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


이 경우 android : onClick 속성을 XML에 넣으면 작동하지 않습니까? (초보 Android 프로그래머)
FateNuller 2014 년

옵션 메뉴에 대한 XML 내부의 @FateNuller onClick이 작동하지 않고 레이아웃에서 작동합니다. onOptionsItemSelected 내에서 작업 표시 줄 옵션 메뉴 클릭을 처리해야합니다.
Marko

상수 표현이 필요합니다. 리소스 ID는 Android 라이브러리 모듈의 switch 문에서 사용할 수 없습니다. Android 라이브러리 모듈의 switch 문에서 리소스 ID를 사용하여 유효성을 검사합니다. SDK 도구 r14는 라이브러리 코드에서 이러한 ID를 상수로 처리 할 수 ​​없음을 의미하므로 리소스 ID는 라이브러리 프로젝트에서 최종적이지 않습니다.
Zon

13

다음 코드 추가

@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

메뉴 항목 파일은 다음과 같습니다.

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>

도움이 되길 바랍니다.


3

이 코드는 나를 위해 일합니다.

@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

질문에 표시된 옵션 외에도 메뉴에서 xml 파일에 직접 작업을 구현할 수 있습니다. 예를 들면 다음과 같습니다.

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

Java (Activity) 파일의 경우 다음과 같이 MenuItem 유형의 단일 매개 변수를 사용하여 공용 메소드를 구현해야합니다.

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

참고 :이 메서드는 onOptionsItemSelected (MenuItem 항목)와 유사한 동작을 갖습니다.


0

다음으로 교체 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);
            }
          }

여기에서에서 DashboardActivity 로 이동하려고 합니다 SettingActivity.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.