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