2013-01-22 21 views
0

我有一个FragmentActivity类,它具有从超类继承的2选项menú用于代码重用目的。Android菜单操作栏:为什么没有一个元素听取点击?

在这个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" 

,当我点击共享菜单项,在动作条的变化,它显示了一个(不同的)另一个项目分享图标。如果我点击这个第二个共享项目,它会工作,它会调用共享意图。但是,我不想这样做。只需点击第一项应该调用共享意图,不要更改操作栏显示第二个共享项....我做错了什么?

回答

0

好的,所以我已经开始工作了。看来我还是缺少一些代码的活动,即这样的:

在这里,我膨胀的菜单

@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

相关问题