Ho un SearchView
nel mio ActionBar
. Ho anche un MainFragmentActivity
che carica la ricerca nel onCreateOptionsMenu
. Come sostituisco Fragment
s dentro e fuori le SearchView
pregevoli opere - con una sola eccezione: v'è il particolare Fragment
dove mi carico in questo modo:Puntatore nullo su ExpandedView per ActionBar Search
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();
L'unica differenza è che io sono l'aggiunta al backstack. Quando provo a colpire il SearchView in ActionBar mentre questo particolare frammento viene visualizzato, o QUALSIASI frammento dopo questo frammento mostra (dopo che questo frammento si chiude, apro il back stack e lo svuoto), quindi ottengo l'errore seguente. È difficile da diagnosticare perché non viene visualizzato nel mio codice.
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)
Questa è una delle poche modifiche che ho fatto da quando sono stato questo errore:
android:title="Search"
android:showAsAction="always|collapseActionView"
Inoltre, questo nel 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;
}
});
Questo è stato implementato in modo che il SearchView
si chiude automaticamente al momento dell'invio. Nota: sto usando ActionBarSherlock
.