0

何らかの理由で、ボタンの 1 つをクリックすると、ActionBar がクラッシュします。optionsSelectMenu のコードは次のとおりです。

public boolean onOptionsItemSelected(MenuItem item)
{   
    switch (item.getItemId())
    {
    case R.id.refresh_button_actionbar:
        if (this.frag instanceof DashboardFragment)
            dashboardFrag.refresh();
        break;
    default: 
        return false;
    }
    return true;
}

そして、ここにlogcatがあります:

07-30 19:17:52.981: E/AndroidRuntime(1358): FATAL EXCEPTION: main
07-30 19:17:52.981: E/AndroidRuntime(1358): java.lang.NullPointerException
07-30 19:17:52.981: E/AndroidRuntime(1358):     at com.android.internal.view.menu.MenuItemImpl.toString(MenuItemImpl.java:496)
07-30 19:17:52.981: E/AndroidRuntime(1358):     at java.lang.StringBuilder.append(StringBuilder.java:202)
07-30 19:17:52.981: E/AndroidRuntime(1358):     at com.actionbarsherlock.app.SherlockFragmentActivity.onMenuItemSelected(SherlockFragmentActivity.java:201)
07-30 19:17:52.981: E/AndroidRuntime(1358):     at com.android.internal.policy.impl.PhoneWindow.onMenuItemSelected(PhoneWindow.java:980)
07-30 19:17:52.981: E/AndroidRuntime(1358):     at com.android.internal.view.menu.MenuBuilder.dispatchMenuItemSelected(MenuBuilder.java:735)
07-30 19:17:52.981: E/AndroidRuntime(1358):     at com.android.internal.view.menu.MenuItemImpl.invoke(MenuItemImpl.java:149)
07-30 19:17:52.981: E/AndroidRuntime(1358):     at com.android.internal.view.menu.MenuBuilder.performItemAction(MenuBuilder.java:874)
07-30 19:17:52.981: E/AndroidRuntime(1358):     at com.android.internal.view.menu.ActionMenuView.invokeItem(ActionMenuView.java:547)
07-30 19:17:52.981: E/AndroidRuntime(1358):     at com.android.internal.view.menu.ActionMenuItemView.onClick(ActionMenuItemView.java:115)
07-30 19:17:52.981: E/AndroidRuntime(1358):     at android.view.View.performClick(View.java:4204)
07-30 19:17:52.981: E/AndroidRuntime(1358):     at android.view.View$PerformClick.run(View.java:17355)
07-30 19:17:52.981: E/AndroidRuntime(1358):     at android.os.Handler.handleCallback(Handler.java:725)
07-30 19:17:52.981: E/AndroidRuntime(1358):     at android.os.Handler.dispatchMessage(Handler.java:92)
07-30 19:17:52.981: E/AndroidRuntime(1358):     at android.os.Looper.loop(Looper.java:137)
07-30 19:17:52.981: E/AndroidRuntime(1358):     at android.app.ActivityThread.main(ActivityThread.java:5041)
07-30 19:17:52.981: E/AndroidRuntime(1358):     at java.lang.reflect.Method.invokeNative(Native Method)
07-30 19:17:52.981: E/AndroidRuntime(1358):     at java.lang.reflect.Method.invoke(Method.java:511)
07-30 19:17:52.981: E/AndroidRuntime(1358):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
07-30 19:17:52.981: E/AndroidRuntime(1358):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
07-30 19:17:52.981: E/AndroidRuntime(1358):     at dalvik.system.NativeStart.main(Native Method)

私が間違っていることのアイデアはありますか?フラグメント比較に関係していると思います。また、コードを「true を返す」に設定すると (true を返すだけで何もしないため)、アクティビティが再開されます。これは意図した動作ですか? もしそうなら、どうすればそれを回避できますか?

これが私の輸入品です:

import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentTransaction;

import com.actifio.android.R;

import com.actionbarsherlock.app.ActionBar;
import com.actionbarsherlock.app.ActionBar.Tab;
import com.actionbarsherlock.app.ActionBar.TabListener;
import com.actionbarsherlock.app.SherlockFragmentActivity;
import com.actionbarsherlock.view.Menu;
import com.actionbarsherlock.view.MenuInflater;
import com.actionbarsherlock.view.MenuItem;
4

1 に答える 1

1

Android の Menu と MenuInflater を使用していますが、ActionBarSherlock に付属のクラスを使用する必要があります。これがあなたのインポートかどうかを確認してください:

import com.actionbarsherlock.view.Menu;
import com.actionbarsherlock.view.MenuInflater;

詳細な説明については、このスレッドの回答を確認してください。問題は解決するはずです。次回は、この種の質問がすでに出されているかどうかを確認してください。

編集:

私はあなたの問題を解決するための微調整(あまりきれいではありませんが機能します)を思いつきました。ワークスペースに actionbarsharlock プロジェクトがあることを願っています。パッケージcom.actionbarsharlock.appに移動し、ファイルを見つけてSharlockFragmentActivity.java開き、201 行目に移動します (CMD/CTRL+L から行番号を入力します)。次の行をコメントアウトします。

try
        {
            if (BuildConfig.DEBUG) Log.d(TAG, "[onMenuItemSelected] featureId: " + featureId + ", item: " + item);
        }catch(Exception e)
        {
            Log.d(TAG,"Exception");
        }

あなたの問題は修正されるはずです。

于 2013-07-30T20:06:30.057 に答える