我在工具栏中将SearchView作为可折叠操作视图。而且每当它失去对其他东西的关注时,我希望它崩溃,但前提是它是空的。
这是我使用的代码:
svSearchView.setOnQueryTextFocusChangeListener((v, hasFocus) -> {
if (!hasFocus && svSearchView.getQuery().toString().isEmpty()) {
mSearchMenuItem.collapseActionView();
}
});
我最近升级了支持库,所以它现在在27.0.1上。我也开始使用新的Toolbar
而不是旧的集成ActionBar。
现在我有问题,当我按下SearchView上的向上按钮(左上角的后退箭头)时它会崩溃。它试图在现实中两次崩溃显然是个问题(首先是我的代码,然后是按下UP按钮)。
java.lang.NullPointerException: Attempt to write to field 'android.view.ViewParent android.view.View.mParent' on a null object reference
at android.view.ViewGroup.removeFromArray(ViewGroup.java:5035)
at android.view.ViewGroup.removeViewInternal(ViewGroup.java:5232)
at android.view.ViewGroup.removeViewInternal(ViewGroup.java:5194)
at android.view.ViewGroup.removeView(ViewGroup.java:5125)
at android.support.v7.widget.Toolbar$ExpandedActionViewMenuPresenter.collapseItemActionView(Toolbar.java:2401)
at android.support.v7.view.menu.MenuBuilder.collapseItemActionView(MenuBuilder.java:1370)
at android.support.v7.view.menu.MenuItemImpl.collapseActionView(MenuItemImpl.java:828)
at android.support.v7.widget.Toolbar.collapseActionView(Toolbar.java:716)
at android.support.v7.widget.Toolbar$3.onClick(Toolbar.java:1381)
at android.view.View.performClick(View.java:6256)
at android.view.View$PerformClick.run(View.java:24701)
at android.os.Handler.handleCallback(Handler.java:789)
at android.os.Handler.dispatchMessage(Handler.java:98)
at android.os.Looper.loop(Looper.java:164)
at android.app.ActivityThread.main(ActivityThread.java:6541)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767)
你知道任何推荐的方法吗?
答案 0 :(得分:0)
最终我做到了这一点。它不漂亮,但它的工作原理。它可以防止两次坍塌。
svSearchView.setOnQueryTextFocusChangeListener((v, hasFocus) -> { if (!hasFocus && !mCollapsing && svSearchView.getQuery().toString().isEmpty()) { mSearchMenuItem.collapseActionView(); } mCollapsing = false; }); mSearchMenuItem.setOnActionExpandListener(new MenuItem.OnActionExpandListener() { @Override public boolean onMenuItemActionExpand(MenuItem item) { //something return true; } @Override public boolean onMenuItemActionCollapse(MenuItem item) { mCollapsing = true; return true; } });