0

* 已回答!:*事實證明,即使您有一個項目的圖標,也需要標題。將監聽器添加到ActionBar項目,onOptionsItemSelected空指針異常

我目前在我的應用程序中實施(Sherlock)Action Bar。我目前有一個屏幕上的按鈕,刷新我的屏幕視圖,我想將此按鈕移動到我的操作欄中。 onOptionsItemSelected的日誌沒有顯示在LogCat中,但創建的菜單正在顯示。

我不知道爲什麼我得到一個空指針,並且在錯誤日誌中找不到發生null的地方。當我點擊操作欄中的刷新按鈕時,該應用程序只會崩潰,並且一切正常,直到該點。

public boolean onCreateOptionsMenu(Menu menu) { 
     Log.i("Created Menu", "Yes"); 
     MenuInflater inflater = getSupportMenuInflater(); 
     inflater.inflate(R.menu.main, menu); 


     return true; 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item){ 
     Log.i("Got into onOptionsItemSelected", "Yes"); 
     switch(item.getItemId()){ 

     case R.id.action_refresh: 

       new getFleetList().execute(getFleetListURL); 
       progressBar.setVisibility(ProgressBar.VISIBLE); 

     return true; 

    } 

堆棧跟蹤:

07-09 12:52:27.594: W/dalvikvm(23570): threadid=1: thread exiting with uncaught exception (group=0x4132e930) 
07-09 12:52:27.601: E/AndroidRuntime(23570): FATAL EXCEPTION: main 
07-09 12:52:27.601: E/AndroidRuntime(23570): java.lang.NullPointerException 
07-09 12:52:27.601: E/AndroidRuntime(23570): at com.android.internal.view.menu.MenuItemImpl.toString(MenuItemImpl.java:496) 
07-09 12:52:27.601: E/AndroidRuntime(23570): at java.lang.StringBuilder.append(StringBuilder.java:202) 
07-09 12:52:27.601: E/AndroidRuntime(23570): at com.actionbarsherlock.app.SherlockFragmentActivity.onMenuItemSelected(SherlockFragmentActivity.java:201) 
07-09 12:52:27.601: E/AndroidRuntime(23570): at com.android.internal.policy.impl.PhoneWindow.onMenuItemSelected(PhoneWindow.java:980) 
07-09 12:52:27.601: E/AndroidRuntime(23570): at com.android.internal.view.menu.MenuBuilder.dispatchMenuItemSelected(MenuBuilder.java:735) 
07-09 12:52:27.601: E/AndroidRuntime(23570): at com.android.internal.view.menu.MenuItemImpl.invoke(MenuItemImpl.java:149) 
07-09 12:52:27.601: E/AndroidRuntime(23570): at com.android.internal.view.menu.MenuBuilder.performItemAction(MenuBuilder.java:874) 
07-09 12:52:27.601: E/AndroidRuntime(23570): at com.android.internal.view.menu.ActionMenuView.invokeItem(ActionMenuView.java:547) 
07-09 12:52:27.601: E/AndroidRuntime(23570): at com.android.internal.view.menu.ActionMenuItemView.onClick(ActionMenuItemView.java:115) 
07-09 12:52:27.601: E/AndroidRuntime(23570): at android.view.View.performClick(View.java:4204) 
07-09 12:52:27.601: E/AndroidRuntime(23570): at android.view.View$PerformClick.run(View.java:17355) 
07-09 12:52:27.601: E/AndroidRuntime(23570): at android.os.Handler.handleCallback(Handler.java:725) 
07-09 12:52:27.601: E/AndroidRuntime(23570): at android.os.Handler.dispatchMessage(Handler.java:92) 
07-09 12:52:27.601: E/AndroidRuntime(23570): at android.os.Looper.loop(Looper.java:137) 
07-09 12:52:27.601: E/AndroidRuntime(23570): at android.app.ActivityThread.main(ActivityThread.java:5041) 
07-09 12:52:27.601: E/AndroidRuntime(23570): at java.lang.reflect.Method.invokeNative(Native Method) 
07-09 12:52:27.601: E/AndroidRuntime(23570): at java.lang.reflect.Method.invoke(Method.java:511) 
07-09 12:52:27.601: E/AndroidRuntime(23570): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793) 
07-09 12:52:27.601: E/AndroidRuntime(23570): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560) 
07-09 12:52:27.601: E/AndroidRuntime(23570): at dalvik.system.NativeStart.main(Native Method) 

編輯,XML文件:

菜單XML:

<menu xmlns:android="http://schemas.android.com/apk/res/android" > 




    <item 
     android:id="@+id/action_refresh" 
     android:icon="@drawable/ic_action_refresh" 
     android:orderInCategory="1" 
     android:showAsAction="always" 

     /> 


</menu> 

回答

1

您使用的這些進口

import com.actionbarsherlock.view.Menu; 
import com.actionbarsherlock.view.MenuItem; 

否則您會收到錯誤消息。

試試這個

@Override 
public boolean onCreateOptionsMenu(com.actionbarsherlock.view.Menu menu) { 

    com.actionbarsherlock.view.MenuInflater inflate = getSupportMenuInflater(); 
    inflate.inflate(R.menu.main, menu); 

    return super.onCreateOptionsMenu(menu); 
} 


@Override 
public boolean onOptionsItemSelected(com.actionbarsherlock.view.MenuItem item) { 
    // Handle item selection 
    switch (item.getItemId()) { 
     case R.id.action_refresh: 
      //do whatever you want 
     break; 
     default: 
      return super.onOptionsItemSelected(item); 
    } 
} 

**** ****更新

<item 
     android:id="@+id/action_legalnotice" 
     android:orderInCategory="100" 
     android:title="Legal Notices"/> 
    <item 
     android:id="@+id/action_refresh" 
     android:icon="@drawable/ic_action_refresh" 
     android:orderInCategory="1" 
     android:showAsAction="always" 


android:title="Your title here please" 

     /> 

看到此鏈接瞭解詳細信息:Null pointer exception showing in action bar sherlock library

+1

這不是一個答案。它應該是一個評論。 – techiServices

+0

@techiServices我已更新我的答案 – Androider

+0

感謝您的回覆。是的,我正在導入這些(導入com.actionbarsherlock.view。*)。不幸的是,這些修復似乎沒有辦法。 onOptionsItemSelected以某種方式得到一個空項目?它沒有進入該方法。 – benzabill