Xử lý sự kiện nhấp chuột vào mục menu - Android


123

Tôi muốn tạo một ý định bắt đầu một hoạt động mới sau khi một Mục Menu được nhấp vào, nhưng tôi không chắc chắn về cách thực hiện việc này. Tôi đã đọc qua tài liệu android, nhưng cách triển khai của tôi không chính xác..và một số hướng dẫn đúng hướng sẽ hữu ích. Tôi đã liệt kê mã của mình bên dưới và nhận xét các lĩnh vực vấn đề của mình, tôi nghĩ rằng tôi đang gọi sai phương pháp.

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

}

Câu trả lời:


297

mã đơn giản để tạo menu ..

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

mã đơn giản cho menu đã chọn

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

để biết thêm chi tiết, hãy truy cập liên kết bên dưới ..

Link1

Link2


Thuộc tính android: onClick không hoạt động trong trường hợp này nếu tôi đặt nó vào XML? (Lập trình viên mới bắt đầu Rất Android tại đây)
FateNuller

@FateNuller onClick bên trong XML cho menu tùy chọn sẽ không hoạt động, nó sẽ hoạt động cho các bố cục. Bạn nên xử lý các nhấp chuột vào menu tùy chọn thanh tác vụ bên trong onOptionsItemSelected.
Marko

Yêu cầu biểu thức không đổi. Không thể sử dụng ID tài nguyên trong câu lệnh switch trong mô-đun thư viện Android ít hơn ... Xác thực bằng cách sử dụng ID tài nguyên trong câu lệnh switch trong mô-đun thư viện Android. Các ID tài nguyên không phải là cuối cùng trong các dự án thư viện vì các công cụ SDK r14, có nghĩa là mã thư viện không thể coi các ID này là hằng số.
Zon

13

Thêm mã sau

@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

Tệp các mục menu trông giống như

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>

Mã Java trông giống như

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

Và thêm mã sau vào tệp AndroidManifest.xml của bạn

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

Tôi hy vọng nó sẽ giúp bạn.


3

Mã này phù hợp với tôi

@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

Ngoài các tùy chọn được hiển thị trong câu hỏi của bạn, có khả năng triển khai hành động trực tiếp trong tệp xml của bạn từ menu, ví dụ:

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

Và đối với tệp Java (Hoạt động) của bạn, bạn cần triển khai một phương thức công khai với một tham số duy nhất kiểu MenuItem, ví dụ:

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

LƯU Ý: Phương thức này sẽ có hành vi tương tự như onOptionsItemSelected (mục MenuItem)


0

Thay thế của bạn onOptionsItemSelectedthành:

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

Ở đây, tôi muốn điều hướng từ DashboardActivity đến SettingActivity.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.