2015-05-03 141 views
2

我在工具欄中有一個搜索按鈕的活動中有多個片段。在我的一個片段中,這一切都成功地工作,但是當我將完全相同的代碼複製到其他兩個片段中時,它們無法正常工作。工具欄中的搜索按鈕沒有顯示鍵盤

當我點擊工作片段上的搜索按鈕時,彈出鍵盤,我可以開始輸入文本。但在另外兩個片段上,當我按下搜索按鈕圖標時,它向左滑動,然後我需要再次按下才能使其工作。任何人都知道我可以解決這個問題?

@Override 
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { 
    inflater.inflate(R.menu.search, menu); 
    MenuItem item = menu.findItem(R.id.action_search); 
    SearchView sv = new SearchView(((Home) getActivity()).getSupportActionBar().getThemedContext()); 
    MenuItemCompat.setShowAsAction(item, MenuItemCompat.SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW | MenuItemCompat.SHOW_AS_ACTION_IF_ROOM); 
    MenuItemCompat.setActionView(item, sv); 
    sv.setOnQueryTextListener(new SearchView.OnQueryTextListener() { 
     @Override 
     public boolean onQueryTextSubmit(String query) { 
      return false; 
     } 

     @Override 
     public boolean onQueryTextChange(String newText) { 
      list.clear(); 
      for (int i = 0; i < mainList.size(); i++) { 
       if (mainList.get(i).getName().toLowerCase().startsWith(newText.toLowerCase(), 0) || mainList.get(i).getAddress().toLowerCase().startsWith(newText.toLowerCase())) { 
        list.add(mainList.get(i)); 
       } 
      } 
      adapter.notifyDataSetChanged(); 
      return false; 
     } 
    }); 

    super.onCreateOptionsMenu(menu, inflater); 
} 

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    switch(item.getItemId()) 
    { 
    case R.id.action_search: 
     getActivity().onSearchRequested(); 
     return true; 

    default: 
     return super.onOptionsItemSelected(item); 
    } 
} 

回答

0

嘗試在菜單項定義搜索查看。

<item android:id="@+id/action_search" 
     android:icon="@drawable/ic_search_white_24dp" 
     android:title="@string/search" 
     app:actionViewClass="android.support.v7.widget.SearchView" 
     app:showAsAction="collapseActionView|always" /> 
+0

我想已經在我的搜索菜單項我有 '<菜單的xmlns:安卓= 「http://schemas.android.com/apk/res/android」 的xmlns:程序兼容性=「HTTP:/ /schemas.android.com/apk/res-auto「> ' –

+0

它適合我。這可能是一個風格問題,你使用searchView的任何自定義樣式? – Stepango

+0

我爲應用程序使用了自定義主題,但沒有使用searchview –

0

嘿,我有同樣的問題,我找到了解決辦法。這可能是因爲你正在給搜索視圖提供一個完整的菜單。所以當您第一次點擊搜索圖標時,完整菜單會被加載,然後再次點擊搜索圖標,然後搜索視圖會打開。

試試下面的代碼

@Override 
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) 
{ 
    inflater.inflate(R.menu.searchview, menu); 
    MenuItem item = menu.findItem(R.id.menu_item_search); 
    SearchView sv = (SearchView) item.getActionView(); 
    if (sv != null){ 
     sv.setSubmitButtonEnabled(true); 
     sv.setOnQueryTextListener(this); 
    } 

    super.onCreateOptionsMenu(menu, inflater); 
} 

searchview.xml

<?xml version="1.0" encoding="utf-8"?> 
<menu xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto"> 

    <item 
     app:showAsAction="always|collapseActionView" 
     android:icon="@android:drawable/ic_menu_search" 
     android:id="@+id/menu_item_search" 
     android:orderInCategory="1" 
     app:actionViewClass="android.support.v7.widget.SearchView" 
     android:title="Search" 
     android:iconifiedByDefault="true"/> 
</menu> 

並確保您導入android.support.v7.widget.SearchView否則會給錯誤鑄造。

希望它會有所幫助。