处理菜单项单击事件-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);
}


}
315326 次浏览

菜单项文件看起来像

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

这个代码是我的工作

@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="showMsgDirectMenuXml" />

对于 Java (Activity)文件,您需要实现一个带有单个参数 MenuItem 类型的公共方法,例如:

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

注意: 此方法的行为类似于 onOptionsItemSelected (MenuItem 项)

将你的 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);
}
}

在这里,我想导航从 DashboardActivitySettingActivity

这就是 Kotlin 的样子

Xml

<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item
android:id="@+id/action_settings"
android:orderInCategory="100"
android:title="@string/action_settings"
app:showAsAction="never" />
<item
android:id="@+id/action_logout"
android:orderInCategory="101"
android:title="@string/sign_out"
app:showAsAction="never" />

然后在“主要活动”

override fun onCreateOptionsMenu(menu: Menu): Boolean {
// Inflate the menu; this adds items to the action bar if it is present.
menuInflater.inflate(R.menu.main, menu)
return true
}

这是 onOptionsItemSelected 函数

override fun onOptionsItemSelected(item: MenuItem): Boolean {
return when(item.itemId){
R.id.action_settings -> {
true
}
R.id.action_logout -> {
signOut()
true
}
else -> return super.onOptionsItemSelected(item)
}
}

开始新的活动

private fun signOut(){
MySharedPreferences.clearToken()
startSplashScreenActivity()
}


private fun startSplashScreenActivity(){
val intent = Intent(GrepToDo.applicationContext(), SplashScreenActivity::class.java)
startActivity(intent)
finish()
}