82

我想创建一个意图,一旦菜单项被点击,开始一个新的活动,但我不知道如何做到这一点。我一直在阅读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); 
    } 

} 

回答

220

创建菜单简单的代码..

@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

+0

工作是否在android:onclick属性没有在这种情况下工作,如果我提出,在XML? (非常初学Android程序员在这里) – FateNuller

+0

@FateNuller onClick内部的XML选项菜单不起作用,它将适用于布局。您应该在onOptionsItemSelected中处理操作栏选项菜单点击。 – Marko

+0

简单而清醒...... !!! –

4

菜单项文件看起来像

RES /菜单/ 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> 

我希望它能帮助你。

6

添加以下代码

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

此代码对我来说是

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