2

私はAndroidの初心者で、ActionBarSherlockのメニューバーを使用してメニューにアクセスしています。API11より前のAndroidAPIではすべて正常に動作しますが、API 11以降では、メニューバー/メニュー項目が応答しません。メニュー項目をクリックするとハイライト表示されますが、実行されません。メニュー項目がリスナーを失ったようです。実装するのを忘れた設定はありますか?どんな助けでも大歓迎です。

私のコード:

//My Sherlock wrapper 
ActionBarSherlock mSherlock = ActionBarSherlock.wrap(this);

//OnCreate
setTheme(R.style.Theme_Sherlock);
mSherlock.setContentView(R.layout.main);

 //Menu Methods
 @Override
public boolean onOptionsItemSelected(MenuItem item) {
    // TODO Auto-generated method stub
    switch (item.getItemId())
    {
        case 1:   // id from the xml file
            Intent i = new Intent("com.bmoney.GSCC.OPTIONS");
            startActivity(i);
            return true;   // we handled the click, dont pass it up the chain

        case 2:   // id from the xml file
            Intent i2 = new Intent("com.bmoney.GSCC.PREFS");
            startActivity(i2);
            return true;
    }
    return false;
}

   @Override
    public boolean onCreateOptionsMenu(android.view.Menu menu) {
        // TODO Auto-generated method stub
        return mSherlock.dispatchCreateOptionsMenu(menu);

    } 


    @Override
    public boolean onCreateOptionsMenu(Menu menu) { //<-- has Sherlock Menu Import

        menu.add(0,1,0,"Preferences").setIcon(R.drawable.ic_action_example).setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);
        menu.add(0,2,0,"Help").setIcon(R.drawable.info).setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);

        return true;
    }
4

3 に答える 3

3

私が推測しなければならないのであれば、あなたのインポートMenuItemandroid.view.MenuItem、Sherlockに相当するものではなく、のためのものです。

もしそうなら、私はそれを提案します:

  • あなたはに追加@OverrideしますonOptionsItemSelected()

  • すべてのインポートを削除してandroid.view.*から、それらをSherlockのものとして再度追加します(たとえば、EclipseのCtrl-Shift-Oを使用)

  • onCreateOptionsMenu()Sherlockインポートを使用する方法を使用して、2つの方法を統合します

于 2013-02-20T00:55:05.647 に答える
2

答えは、メニューイベントを処理するときに「trueを返す」必要があるということだと思います。

また、メソッドを次のように再構築すると、読みやすく、保守しやすくなる場合があります。

@Override
public boolean onOptionsItemSelected(MenuItem item) {

switch (item.getItemId())
{
    case R.id.options:   // id from the xml file
        Intent i = new Intent("com.bmoney.GSCC.OPTIONS");
        startActivity(i);
        return true;   // we handled the click, dont pass it up the chain

    case R.id.prefs:   // id from the xml file
        Intent i = new Intent("com.bmoney.GSCC.PREFS");
        startActivity(i);
        return true;
}

return false;

}

于 2013-02-20T01:59:56.457 に答える
1

onCreateOptionsMenuに追加するときは、メニュー項目にOnMenuItemClickListenerを追加する必要があると思います。次に、OnMenuItemSelectedメソッドを追加し、OnMenuItemSelectedメソッドのonOptionItemSelectedにあるコードを実装します。だからあなたは持っているべきです...

@Override
public boolean onMenuItemClick(MenuItem item) {  

     // Code from inside onoptionItemSelected
}
于 2013-02-21T03:39:43.553 に答える