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
.