2017-05-12 13 views
2

AndroidデベロッパーのSearchviewに時間がありません。回転後の検索ビュー - ボタンが「3ドット」に移動する

ツールバーのアプリでSearchviewを実装しようとしています。今のところうまくいきますが、デバイスを回転させると、検索ビューが奇妙に動作します。

私の目標は、私は回転後.expandActionViewを()、使用(および「X」ボタンを使用してフィールドを清掃する場合は

@Override 
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { 

    inflater.inflate(R.menu.menu_funcionarios_toolbar, menu); 

    clearSearchItem = menu.findItem(R.id.botao_limpar_busca); 

    searchItem = menu.findItem(R.id.botao_buscar); 
    searchItem.setIcon(new IconicsDrawable(getContext(), MaterialDesignIconic.Icon.gmi_search).sizeDp(24)); 

    searchView = (SearchView) searchItem.getActionView(); 

    searchView.setMaxWidth(Integer.MAX_VALUE); 
    searchView.setOnQueryTextListener(searchViewTextListener); 


    searchView.post(new Runnable() { 
     @Override 
     public void run() { 
      if (!mQuery.equals("")) { 
       searchView.setQuery(mQuery,false); 
      } 
     } 
    }); 

    if (mQuery != null & !mQuery.equals("")) { 
     searchItem.expandActionView(); 
    } 

しかしが提供する「OnCreateOptionsMenu」に、クエリテキストを存続でありますSearchView)を実行すると、MenuItemは何もせずに3つの小さな点に変わります。以前の動作を復元するには、デバイスを再び回転させる必要があります。

私はこの問題は私のXMLであり、ほぼ確信している:

<item 
android:id="@+id/botao_buscar" 
android:title="@string/menu_buscar" 
app:showAsAction="collapseActionView|ifRoom" 
app:actionViewClass="android.support.v7.widget.SearchView"/> 

「常に」の魅力のように働いたために「showAsAction」属性を変更します。

これについてのご意見はありますか?

+0

同じ問題があります。しかし、showAsAction = "always"は回転した後でも、醜いフルスクリーンの検索バーを表示します –

答えて

0

私は同様の問題を抱えており、このように解決しました。 onCreateOptionsMenuで

:searchViewメニュー項目の

@Override 
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { 
    super.onCreateOptionsMenu(menu, inflater); 
    inflater.inflate(R.menu.menu, menu); 

    MenuItem item = menu.findItem(R.id.search_option); 

    SearchView searchView = (SearchView) MenuItemCompat.getActionView(item); 

    searchView.setOnQueryTextListener(searchQueryListener); 

    if(searchQuery!=null && !searchQuery.equals("")) { 
     searchView.setIconified(false); 
     searchView.setQuery(searchQuery,true); 
     searchView.clearFocus(); 
    } 

} 

:私の場合は

<item 
    android:id="@+id/search_option" 
    android:title="@string/button_search" 
    app:actionViewClass="android.support.v7.widget.SearchView" 
    app:showAsAction="always"/> 

私は、検索ビューの右側とそれが正常に動作し、このようにアイコンで別のメニュー項目を持っています装置を回転させるときに。 showAsAction="always"から生じた醜い検索バーを克服するために

0

、私はこの方法(showAsAction="collapseActionView|ifRoom"を維持)を解く:

public boolean onCreateOptionsMenu(Menu menu) {   

    ... 

    if (!TextUtils.isEmpty(mQuery)) 
     new Handler().post(() -> { 
      searchView.clearFocus(); 
      searchView.setIconified(false); 
      searchItem.expandActionView();//or MenuItemCompat.expandActionView for older devices 
      searchView.setQuery(mQuery, false);//or true here if you want it submitted! 
     }); 

} 

トリックはsearchView.setIconfied(false)searchItem.expandActionView()を呼び出すことです。

安定性を高めるため、配列全体をpostに保存していますが、それはnew Handler()にする方が効果的です。

関連する問題