我有一个 FragmentActivity 类,它有一个从超类继承的 2 选项菜单,用于代码重用。
在这个 FragmentActivity 中,我添加了第三个菜单项并将 onOptionsItemSelected 设置为对共享菜单项执行我想要的操作(第三个有自己的 onMenuItemClick 侦听器)。但是,当我运行该应用程序时,第二个和第三个选项(一个导致菜单和新的选项)会注册点击并执行他们被告知的操作,但第二个选项(一个设置为调用共享意图)没有。点击它什么也没做。
这是我的菜单 xml
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
<item
android:id="@+id/ab_comparte"
android:icon="@android:drawable/ic_menu_share"
android:showAsAction="always|withText"
android:title="@string/menu_share"
android:menuCategory="container"
android:orderInCategory="1"
android:actionProviderClass="com.actionbarsherlock.widget.ShareActionProvider"
/>
<item
android:id="@+id/ab_menu"
android:icon="@drawable/ic_action_bar_menu"
android:showAsAction="always|withText"
android:title="@string/menu_menu"
android:menuCategory="container"
android:orderInCategory="2"/>
</menu>
这是片段活动(仅与菜单相关的位)
public boolean onCreateOptionsMenu(Menu menu) {
/*
MenuInflater inflater = getSupportMenuInflater();
inflater.inflate(R.menu.menu_detalle_tapa, (Menu) menu);
*/
menu.add("Me Gusta")
.setOnMenuItemClickListener(this)
.setIcon(R.drawable.like_blanco)
.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);
return super.onCreateOptionsMenu(menu);
}
.....
@Override
public boolean onMenuItemClick(MenuItem item) {
Crouton.makeText(this, "ME GUSTA", Style.ALERT).show();
return false;
}
...................
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int itemId = item.getItemId();
Log.d(CData.LOGTAG, "pulsado en menú item " + itemId);
if (itemId == R.id.ab_comparte){
// cerrar sesión
Log.d(CData.LOGTAG, "pulsado en menú item Comparte" + itemId);
Crouton.makeText(this, "ahora se abriría el menú de compartir ", Style.INFO).show();
Intent i=new Intent(android.content.Intent.ACTION_SEND);
i.setType("text/plain");
/*i.putExtra(Intent.EXTRA_SUBJECT,
Tappabook.getAppContext().getResources().getString(R.string.asunto_compartir_tapa)
);*/
String en = Tappabook.getAppContext().getResources().getString(R.string.en);
String comparteTapa =
tapaDetallada.getNombre() + " "
+ " " + en + " "
+ tapaDetallada.getBarNombre() + " "
+ CData.urlCompartirTapa + tapaDetallada.getId()
;
i.putExtra(Intent.EXTRA_TEXT,comparteTapa);
startActivity(
Intent.createChooser(
i,
Tappabook.getAppContext().
getResources().getString(R.string.titulo_compartir_tapa)
)
);
return true;
}else{
Log.d(CData.LOGTAG, "pulsado en menú item " + itemId);
return super.onOptionsItemSelected(item);
}
}
这是与超类菜单相关的位
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getSupportMenuInflater();
inflater.inflate(R.menu.menu_activity_login, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int itemId = item.getItemId();
if (itemId == R.id.ab_menu){
// cerrar sesión
Log.d(CData.LOGTAG, "pulsado en menú item Menú" + itemId);
Intent intent = new Intent(this, MenuFA.class);
//intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
return true;
}else{
Log.d(CData.LOGTAG, "pulsado en menú item " + itemId);
return super.onOptionsItemSelected(item);
}
}
那么我做错了什么?选项 ab_menu 可以正常工作。选项“Me gusta”(带有自己的监听器)也有效。但是选项 ab_comparte,虽然它出现在操作栏上,但它甚至不“听”点击。
任何帮助将不胜感激。
更新:我已经在共享项目的 xml 上更改了这个
android:showAsAction="collapseActionView|always"
现在,当我单击共享菜单项时,操作栏会发生变化,并显示另一个带有(不同)共享图标的项目。如果我单击第二个共享项目,它确实有效,它会调用共享意图。但是,我不想这样做。只需单击第一个项目应该调用共享意图,而不是更改操作栏以显示第二个共享项目....我做错了什么?