我有一个FragmentActivity类,带有一个2选项menú,它继承自超类,用于代码重用。
在这个FragmentActivity中,我添加了第三个菜单项,并将onOptionsItemSelected设置为我想要的Share菜单项(第三个获取自己的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"
现在,当我点击共享菜单项时,操作栏会更改,并显示另一个带有(不同)共享图标的项目。如果我点击这个第二个共享项目它确实有效,它会调用Share Intent。但是,我不想这样做。只需点击第一项就可以调用Share Intent,而不是更改操作栏以显示第二个共享项....我做错了什么?
答案 0 :(得分:0)
好的,所以我已经开始工作了。似乎我在Activity中遗漏了一些代码,即:
这里我给菜单充气
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getSupportMenuInflater();
inflater.inflate(R.menu.menu_detalle_tapa, (Menu) menu);
MenuItem item = menu.findItem(R.id.ab_comparte);
mShareActionProvider = (ShareActionProvider) item.getActionProvider();
this.menu = menu;
return true;
}
当我已经获得远程数据时会发生这种情况(因此您无法尝试共享空值/空对象
/** Getting the target intent */
Intent intent = getDefaultShareIntent();
Log.d(CData.LOGTAG, "check if intent is null ");
/** Setting a share intent */
if(intent!=null)
mShareActionProvider.setShareIntent(intent);
else
Log.d(CData.LOGTAG, "intent was null ");
这是我决定要分享什么的地方
private Intent getDefaultShareIntent(){
Intent intent = new Intent(Intent.ACTION_SEND);
intent.setType("text/plain");
//intent.putExtra(Intent.EXTRA_SUBJECT, "SUBJECT");
String en = Tappabook.getAppContext().getResources().getString(R.string.en);
String comparteTapa =
tapaDetallada.getNombre() + " "
+ " " + en + " "
+ tapaDetallada.getBarNombre() + " "
+ CData.urlCompartirTapa + tapaDetallada.getId()
;
intent.putExtra(Intent.EXTRA_TEXT,comparteTapa);
return intent;
}
原来我是个白痴:P