メニュー項目クリックイベントの処理-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);
}
}
メニューを作成するための簡単なコード..
@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);
}
}
詳細については、以下のリンクをご覧ください。
次のコードを追加
@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);
}
}
メニュー項目ファイルは次のようになります
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>
それがあなたのお役に立てば幸いです。
このコードは私のために働いています
@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);
}
質問に示されているオプションに加えて、次の例のように、メニューから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アイテム)と同様の動作をします