0

我有一个 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"

现在,当我单击共享菜单项时,操作栏会发生变化,并显示另一个带有(不同)共享图标的项目。如果我单击第二个共享项目,它确实有效,它会调用共享意图。但是,我不想这样做。只需单击第一个项目应该调用共享意图,而不是更改操作栏以显示第二个共享项目....我做错了什么?

4

1 回答 1

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

于 2013-01-25T11:10:34.883 回答