2016-02-19 54 views
2

簡而言之:當我點擊我的SearchViewIcon時,SearchView不會摺疊/展開。Android SearchView需要兩次點擊才能展開視圖

長:。

我「米使用搜索查看過濾的片段是在我的MainActivity一個RecyclerView

當我點擊SearchViewIcon(搜索查看被默認圖標化),我打開與此代碼正確的片段選項卡:。

searchView.setOnSearchClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       viewPager.setCurrentItem(2, false); 
      } 
     }); 

的標籤與正確的片段被打開像預期另外的文本輸入被示出,但搜索查看撐圖標化(見下圖)。

Application

我在XML搜索查看:

<item 
    android:id="@+id/action_search" 
    android:orderInCategory="1" 
    android:icon="@android:drawable/ic_menu_search" 
    android:title="@string/menu_item_search_title" 
    app:showAsAction="ifRoom" 
    app:queryHint="Search name or function" 
    app:actionViewClass="android.support.v7.widget.SearchView" /> 

事情我已經嘗試過:

設置我showAsAction總是或ifRoom | collapseActionView

app:showAsAction="always" 
app:showAsAction="ifRoom|collapseActionView" 

請關注我的搜索查看:

searchView.requestFocus(); 

擴大我SearchViewItem:

MenuItem searchViewItem = menu.findItem(R.id.action_search); 
searchViewItem.expandActionView(); 

但這些東西不工作...

編輯 就像標題所說,如果我再次點擊SearchViewIcon中,搜索查看並擴大。

+0

你有沒有試過用MenuItemCompat.expandActionView(searchViewItem)? –

+0

是的,謝謝,我已經試過了。 – Kerkhofsd

回答

0

我也遇到了類似的問題,並能夠解決它。 我需要解決的主要問題是:

  1. 搜索查看是不是默認
  2. 搜索的EditText甚至解決(2)後並沒有得到焦點,直到第二次點擊
  3. 擴大,鍵盤沒有露面,直到第二次點擊

解決方案:

    在menu.xml文件
  1. 需要定義app:showAsAction"collapseActionView" +在Java代碼中還需要調用searchView.setIconifiedByDefault(false)的擴張優先於圖標化(即 - 按下圖標時,擴大和不停留在圖標模式)
  2. search menu-item object添加MenuItem.OnActionExpandListener並使用一個處理程序發佈一個可運行的程序,該程序將請求您的焦點到您的search-view object。 (爲什麼可運行?因爲在菜單尚未完全膨脹時請求焦點不能保證工作。當請求處理程序可運行的焦點時,我確保焦點請求在onCreateOptionsMenu()的所有工作準備好之後發生並且完了。
  3. 從(2)中定義相同的runnable,還要求android操作系統顯示鍵盤。

完整代碼解決所有這些問題:

menu.xml文件:

<item 
    android:id="@+id/searchContacts" 
    android:icon="@drawable/ic_search_white_24dp" 
    android:title="search" 
    app:showAsAction="collapseActionView|always" 
    app:actionViewClass="android.widget.SearchView" 
    /> 
<!-- and of course your other menu items --> 

搜索的配置:

需要創建這樣的XML文件。 右鍵單擊您的res文件夾並選擇new --> android resource file。把你想要的任何東西作爲文件名(例如「可搜索」將正常工作),並選擇XML作爲資源類型。 然後複製&粘貼此代碼中創建的文件(用自己的替換提示字符串):

<?xml version="1.0" encoding="utf-8"?> 

<searchable xmlns:android="http://schemas.android.com/apk/res/android" 
    android:label="@string/app_name" 
    android:hint="put here your hint string to be shown" 
    /> 

MainActivity:

@Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     super.onCreateOptionsMenu(menu); 
     getMenuInflater().inflate(R.menu.menu, menu); 
     implementSearch(menu); 
     return true; 
    } 

    private void implementSearch(final Menu menu) { 
     SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE); 
     final MenuItem searchMenuItem = menu.findItem(R.id.searchContacts); 
     final SearchView searchView = (SearchView) searchMenuItem.getActionView(); 
     searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName())); 
     searchView.setIconifiedByDefault(false); 

     searchMenuItem.setOnActionExpandListener(new MenuItem.OnActionExpandListener(){ 
      @Override 
      public boolean onMenuItemActionExpand(MenuItem item){ 
       // the search view is now open. add your logic if you want 
       new Handler().post(new Runnable() { 
        @Override 
        public void run() { 
         searchView.requestFocus(); 
         InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); 
         if (imm != null) { // it's never null. I've added this line just to make the compiler happy 
          imm.showSoftInput(searchView.findFocus(), 0); 
         } 


        } 
       }); 
       return true; 
      } 


      @Override 
      public boolean onMenuItemActionCollapse(MenuItem item){ 
       // the search view is closing. add your logic if you want 
       return true; 
      } 

     }); 

    } 

另外,如果你想用你自己回調搜索的文本更改並提交(而不是Android意圖),在implementSearch()方法中,添加對searchMenuItem.setOnActionExpandListener(new SearchView.OnQueryTextListener({...}))的調用。

視圖this SO question更多細節

相關問題