我正在构建一个在工具栏中具有菜单项的应用程序,我为一个菜单创建了子菜单,即其ID为“ cloud”。当点击将打开不同的活动时,我想在每个子菜单上实现onclick。
这是menu.xml文件
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item
android:id="@+id/action_refresh"
app:showAsAction="ifRoom"
android:title="Refresh"
android:icon="@drawable/ic_loop_black_24dp"></item>
<item
android:id="@+id/notes"
app:showAsAction="ifRoom"
android:title="Refresh"
android:icon="@drawable/ic_event_note_black_24dp"></item>
<item
android:id="@+id/cloud"
app:showAsAction="ifRoom"
android:title="Refresh"
android:icon="@drawable/ic_cloud_upload_blackt_24dp">
<menu>
<group
android:checkableBehavior="single">
<item android:id="@+id/imageee"
android:title="Image Upload"
android:orderInCategory="100"
app:showAsAction="ifRoom" />
<item android:id="@+id/pdfff"
android:title="Pdf Upload"
android:orderInCategory="100"
app:showAsAction="never"/>
</group>
</menu>
</item>
</menu>
这是Mainactivity文件
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
mymenu = menu;
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch(item.getItemId()) {
case R.id.action_refresh:
Intent intent = new Intent(MainActivity.this, UpdateService.class);
startService(intent);
}
return true;
case R.id.notes:{
Intent activity_weather = new Intent(this,Physics.class);
startActivity(activity_weather);
}
return true;
case R.id.cloud:{
}
return true;
}
return super.onOptionsItemSelected(item);
}
我寻找答案并自己尝试,但我不知道如何实现。
感谢您的帮助。
谢谢。
答案 0 :(得分:1)
我为您提供解决方案:
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.action_refresh:
// TODO:
toast("refresh");
return true;
case R.id.notes:
// TODO:
toast("notes");
return true;
case R.id.imageee:
// TODO: Start your image upload
toast("imageee");
return true;
case R.id.pdfff:
// TODO: Start your PDF upload
toast("pdfff");
return true;
default:
return super.onOptionsItemSelected(item);
}
}
public void toast(String message) {
Toast.makeText(this, message, Toast.LENGTH_SHORT).show();
}
我写了toast
方法来在用户单击菜单或子菜单上的项目时显示吐司。请删除//TODO:
行,并在其中添加每种情况的代码。
答案 1 :(得分:0)
我不希望你拥有
android:checkableBehavior="single"
在子菜单上设置。仅当您只想捕获菜单项中的一个(或多个)选择时,此行为才有用,而当用户选择子菜单项时您实际上想做出反应(即:做某事)时,此行为才有用。
根据您的问题,听起来好像您想在用户选择这些子菜单项之一时启动另一个Activity
。为此,只需将这些菜单项添加到switch
中的onOptionsItemSelected()
语句中即可:
case R.id.imageee:
Intent imageIntent = new Intent(this, Upload.class);
startActivity(imageIntent);
return true;
case R.id.pdfff:
Intent pdfIntent = new Intent(this, Pdf.class);
startActivity(pdfIntent);
return true;
答案 2 :(得分:0)
另一个有趣的解决方案可能是:
@Override
public boolean onOptionsItemSelected(MenuItem item) {
Intent intent = new Intent();
switch (item.getItemId()) {
case R.id.action_refresh:
intent.setClass(this, UpdateService.class);
break;
case R.id.notes:
intent.setClass(this, Physics.class);
break;
case R.id.cloud:
intent = null;
break
case R.id.imageee:
// TODO set intent class
break;
case R.id.pdfff:
// TODO set intent class
break;
}
// If the selected item is the one that opens the submenu does not try to start the
// activity avoiding throwing null pointer exception and consequently opens the submenu
if (!(intent == null))
startActivity(intent);
return super.onOptionsItemSelected(item);
}
这样,您就不必多次(在所有情况下)对该方法的相同调用。
startActivity()
节省代码行。如果您决定将更多项目添加到菜单中,将更加有利。