5

Ich habe eine SearchView in meinem ActionBar. Ich habe auch eine MainFragmentActivity, die die Suche in der onCreateOptionsMenu lädt. Wie ich Fragment s Ein- und Auszoomen der SearchView Werke tauschen fein - mit einer Ausnahme: Es gibt zu bestimmten Fragment, wo ich wie folgt laden:Null Zeiger auf ExpandedView für ActionBar Suche

FragmentTransaction t = fm.beginTransaction(); 
SherlockListFragment mFrag = new RateReviewFragment(); 

t.add(R.id.main_frag, mFrag); 
t.setCustomAnimations(R.anim.animation_leave, R.anim.animation_enter, 
     R.anim.animation_leave, R.anim.animation_enter); 
t.show(mFrag); 
t.addToBackStack(null); 
t.commit(); 

Der einzige Unterschied hier ist, ich es dem Backstack bin hinzuzufügen. Wenn ich versuche, das SearchView in der ActionBar zu treffen, während dieses Fragment angezeigt wird, oder JEDES Fragment, das nach diesem Fragment angezeigt wird (nachdem dieses Fragment geschlossen wurde, platziere ich den Backstack und lösche es), dann erhalte ich den folgenden Fehler. Es ist schwer zu diagnostizieren, da es nicht in meinem Code angezeigt wird.

06-17 10:03:33.668: E/AndroidRuntime(9224): FATAL EXCEPTION: main 
06-17 10:03:33.668: E/AndroidRuntime(9224): java.lang.NullPointerException 
06-17 10:03:33.668: E/AndroidRuntime(9224):  at com.android.internal.widget.ActionBarView$ExpandedActionViewMenuPresenter.expandItemActionView(ActionBarView.java:1470) 
06-17 10:03:33.668: E/AndroidRuntime(9224):  at com.android.internal.view.menu.MenuBuilder.expandItemActionView(MenuBuilder.java:1233) 
06-17 10:03:33.668: E/AndroidRuntime(9224):  at com.android.internal.view.menu.MenuItemImpl.expandActionView(MenuItemImpl.java:620) 
06-17 10:03:33.668: E/AndroidRuntime(9224):  at com.android.internal.view.menu.MenuBuilder.performItemAction(MenuBuilder.java:879) 
06-17 10:03:33.668: E/AndroidRuntime(9224):  at com.android.internal.view.menu.ActionMenuView.invokeItem(ActionMenuView.java:524) 
06-17 10:03:33.668: E/AndroidRuntime(9224):  at com.android.internal.view.menu.ActionMenuItemView.onClick(ActionMenuItemView.java:131) 
06-17 10:03:33.668: E/AndroidRuntime(9224):  at android.view.View.performClick(View.java:4102) 
06-17 10:03:33.668: E/AndroidRuntime(9224):  at android.view.View$PerformClick.run(View.java:17085) 
06-17 10:03:33.668: E/AndroidRuntime(9224):  at android.os.Handler.handleCallback(Handler.java:615) 
06-17 10:03:33.668: E/AndroidRuntime(9224):  at android.os.Handler.dispatchMessage(Handler.java:92) 
06-17 10:03:33.668: E/AndroidRuntime(9224):  at android.os.Looper.loop(Looper.java:155) 
06-17 10:03:33.668: E/AndroidRuntime(9224):  at android.app.ActivityThread.main(ActivityThread.java:5454) 
06-17 10:03:33.668: E/AndroidRuntime(9224):  at java.lang.reflect.Method.invokeNative(Native Method) 
06-17 10:03:33.668: E/AndroidRuntime(9224):  at java.lang.reflect.Method.invoke(Method.java:511) 
06-17 10:03:33.668: E/AndroidRuntime(9224):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1029) 
06-17 10:03:33.668: E/AndroidRuntime(9224):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:796) 
06-17 10:03:33.668: E/AndroidRuntime(9224):  at dalvik.system.NativeStart.main(Native Method) 

Dies ist eine der wenigen Änderungen, die ich es gemacht habe, seit ich diese Fehler gewesen bekommen:

android:title="Search" 
android:showAsAction="always|collapseActionView" 

Auch dies im FragmentActivity

searchView.setOnQueryTextListener(new OnQueryTextListener() { 
     public boolean onQueryTextChange(String arg0) { 
      // TODO Auto-generated method stub 
      return false; 
     } 

     public boolean onQueryTextSubmit(String arg0) { 
      if (searchItem != null) { 
       searchItem.collapseActionView(); 
      } 
      return false; 
     } 

    }); 

Dies wurde so die umgesetzt SearchView schließt sich automatisch bei der Übergabe. Hinweis: Ich verwende ActionBarSherlock.

Antwort

9

Ich erlebte genau das gleiche Problem. Nach vielen schmerzhaften Versuch und Irrtum fand ich schließlich heraus, dass das Problem in meinem Fall war das Symbol auf null setzen:

getSupportActionBar().setIcon(null); 

ActionBarSherlock stürzt kryptisch auf dem Versuch, die ActionView nach tun, dies zu zeigen.

Ich hoffe, dass Ihr Fall ähnlich ist.