失去焦点时折叠SearchView(支持库)

时间:2017-11-29 13:27:41

标签: java android

我在工具栏中将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)

你知道任何推荐的方法吗?

1 个答案:

答案 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;
                }
            });