2013-07-30 36 views
0

無論出於何種原因,當我點擊其中一個按鈕時,我的ActionBar崩潰。下面是該optionsSelectMenu代碼:選擇ABS的Android崩潰項目

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; 

回答

1

您正在使用Android的菜單和MenuInflater,而應使用附帶ActionBarSherlock類。檢查,如果這是你的進口對他們來說:

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

入住這thread進行了詳細的explanation.Your問題給出了答案應該得到解決。下一次確定是否已經問過這類問題。

編輯:

我想出了一個好辦法(不是很乾淨,但工程)爲您解決問題。希望您的工作區中有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"); 
     } 

你的問題應該是固定的。

+0

事情是,我使用的進口來自Action Bar Sherlock。它們完全匹配。 –

+0

那我就不明白了。看看日誌貓輸出.'java.lang.NullPointerException 07-30 19:17:52.981:E/AndroidRuntime(1358):在com.android.internal.view.menu.MenuItemImpl.toString(MenuItemImpl.java :496)'如果您使用了sharlock導入,那麼錯誤應該來自'com.actionbarsharlock.internal.view.menu.MenuItemImpl'類。請重新檢查您的代碼。恐怕你已經導入了兩個,但使用Android的。 –

+0

將我的導入添加到主線程。這些是我使用的唯一:/不使用任何默認的Android。 我使用getSupportActionBar()實例化Action Bar,並使用getSupportMenuInflater()來實現inflater。 –