2017-11-29 11 views
0

私は、ツールバーのSearchViewを折りたたみアクションビューとして持っています。そして、私はそれが何かに焦点を失うたびに、それが崩壊したかったが、それが空の場合のみ。フォーカスを失ったときのSearchViewの折りたたみ(サポートライブラリ)

これは私が使用したコードだった:

svSearchView.setOnQueryTextFocusChangeListener((v, hasFocus) -> { 
      if (!hasFocus && svSearchView.getQuery().toString().isEmpty()) { 
       mSearchMenuItem.collapseActionView(); 
      } 
}); 

私は最近、サポートライブラリをアップグレードしているので、27.0.1になりましたです。私はまた古い統合されたActionBarの代わりに新しいToolbarを使い始めました。 SearchViewで上ボタンを押すとクラッシュするという問題があります(左上の戻る矢印)。現実には2回(最初はコードで、2回目は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

完全なアクティビティコードを投稿できますか?クラッシュはNullPointerExceptionに関連し、投稿したコードに基づいて、コードのその部分ではありません。 –

+0

残念ながら、ここで完全なアクティビティコードを投稿することはできません。しかし、クラッシュは、すでに折りたたまれているときにもはや存在しないビューの親に関係しています。 –

+1

単純な修正は、SearchViewの親がnullで、コールバックの内部に戻るかどうかをチェックすることです。正しい修正は、2回の発射を防ぐことです。 –

答えて

0

最終的に私はこれを行いました。それはかなりではありませんが、それは動作します。これは、2回の折り畳みを防止します。

 

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

関連する問題