2012-12-17 31 views

回答

1

確定。我弄錯了。我們不能添加searchCommand做

setShowAsAction(MenuItem.SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW) 

這樣做會刪除SEARCHTEXT如果有的話,因此我們不能做的OnClose()。

1

我做的事理清了類似的問題,是我創建的擴展搜索查看一個新的類:

public class EnglishVerbSearchView extends SearchView { 

OnSearchViewCollapsedEventListener mSearchViewCollapsedEventListener; 

public EnglishVerbSearchView(Context context) { 
    super(context); 
} 

@Override 
public void onActionViewCollapsed() { 
    if (mSearchViewCollapsedEventListener != null) 
     mSearchViewCollapsedEventListener.onSearchViewCollapsed(); 
    super.onActionViewCollapsed(); 
} 

public interface OnSearchViewCollapsedEventListener{ 
    public void onSearchViewCollapsed(); 
} 

public void setOnSearchViewCollapsedEventListener(OnSearchViewCollapsedEventListener eventListener) { 
    mSearchViewCollapsedEventListener = eventListener; 
} 

} 

然後,您可以使用這個類而不是搜索查看你的菜單的XML文件:

<?xml version="1.0" encoding="utf-8"?> 
<menu xmlns:android="http://schemas.android.com/apk/res/android" 
     xmlns:yourapp="http://schemas.android.com/apk/res-auto" > 
    <item android:id="@+id/action_search" 
     android:title="@string/action_search" 
     android:icon="@drawable/action_search" 
     yourapp:showAsAction="ifRoom|collapseActionView" 
     yourapp:actionViewClass="com.szymontrapp.englishverbs.EnglishVerbSearchView" /> 
</menu> 

然後你就可以在你的活動添加一個偵聽器:

getMenuInflater().inflate(R.menu.dictionary, menu); 
    MenuItem searchItem = menu.findItem(R.id.action_search); 
    EnglishVerbSearchView searchView = (EnglishVerbSearchView)  MenuItemCompat.getActionView(searchItem);  

    // Get the SearchView and set the searchable configuration 
    SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE); 
    // Assumes current activity is the searchable activity 
    searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName())); 
    searchView.setIconifiedByDefault(false); // Do not iconify the widget; expand it by default 

    searchView.setOnSearchViewCollapsedEventListener(listener); 

您也可以overrid e類中的其他方法替換SearchView以實現其他目標。

+0

我在這裏有一個類似的問題:http://stackoverflow.com/questions/43702055/android-how-do-i-get-searchview-close-button-to-return-to-search-edittext?noredirect= 1個#comment74449117_43702055。任何想法或想法如何解決? – AJW

14

我遇到了同樣的問題在Android 4.1.1。看起來它是一個已知的bug:https://code.google.com/p/android/issues/detail?id=25758

無論如何,作爲一種解決方法,我使用狀態更改偵聽器(當SearchView從操作欄中分離出來時,它也顯然關閉)。

view.addOnAttachStateChangeListener(new OnAttachStateChangeListener() { 

    @Override 
    public void onViewDetachedFromWindow(View arg0) { 
     // search was detached/closed 
    } 

    @Override 
    public void onViewAttachedToWindow(View arg0) { 
     // search was opened 
    } 
}); 

上面的代碼在我的情況下工作得很好。

1

當點擊「x」圖標時得到通知,我增加了一個上點擊收聽到搜索查看「X」按鈕。

由ID查找搜索查看「X」按鈕並附加OnClickListener:

mSearchView.findViewById(R.id.search_close_btn) 
    .setOnClickListener(this); 

視圖search_close_btn存在於由Android框架提供的搜索查看佈局。

2

爲了呼叫的OnClose從SearchView.OnCloseListener()方法。我以如下方式開展工作。 添加到您的搜索查看

searchView.setIconifiedByDefault(true); 
searchView.setOnCloseListener(this); 

現在實現這個的onclick監聽

searchView.findViewById(R.id.search_close_btn) 
       .setOnClickListener(new View.OnClickListener() { 
        @Override 
       public void onClick(View v) { 
        Log.d("called","this is called."); 
        searchView.setQuery("",false); 
        searchView.setIconified(true); 

       } 
      }); 

這爲我工作。分享,以便它可以幫助別人。 感謝

0
MenuItemCompat.OnActionExpandListener expandListener = new MenuItemCompat.OnActionExpandListener() { 
     @Override 
     public boolean onMenuItemActionCollapse(MenuItem item) { 
      // Do something when action item collapses 
      /*Hiding the mic on search visibility*/ 
       myMenu.findItem(R.id.action_speak).setVisible(false); 
      Log.v("test","colllapse"); 
      return true; // Return true to collapse action view 
     } 

     @Override 
     public boolean onMenuItemActionExpand(MenuItem item) { 
      // Do something when expanded 
      Log.v("test","expand"); 
      return true; // Return true to expand action view 
     } 
    }; 

    //Searchview Initilisation 
    MenuItem searchViewItem = menu.findItem(R.id.action_search); 
    // Assign the listener to that action item 
    MenuItemCompat.setOnActionExpandListener(searchViewItem, expandListener); 

更多信息從這裏:https://developer.android.com/training/appbar/action-views.html

+0

這可以從一些額外的解釋中受益。 – Raidri

-1

如果已經設置了

searchView.setIconifiedByDefault(false) 

那麼,你的搜索查看永遠不會關閉,因爲它總是處於擴展狀態。這就是你的onClose()沒有被調用的原因。

0

創建菜單項並將app:showAsAction設置爲始終。

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

onCreateOptionsMenu方法創建SearchView做這樣的事

inflater.inflate(R.menu.menu_search, menu); 
final MenuItem item = menu.findItem(R.id.action_search); 
final SearchView search = (SearchView) item.getActionView(); 
search.setQueryHint(getString(R.string.search_brand_item)); 
search.setOnQueryTextListener(new SearchView.OnQueryTextListener() { 
    @Override 
    public boolean onQueryTextSubmit(String query) { 
    // add your code 
    return false; 
    } 

    @Override 
    public boolean onQueryTextChange(String newText) { 
    // add your code 
    return false; 
    } 
}); 
search.setOnCloseListener(new SearchView.OnCloseListener() { 
    @Override 
    public boolean onClose() { 
    // add your code here 
    return false; 
    } 
}); 
search.setIconifiedByDefault(true); // make sure to set this to true 

search.setIconifiedByDefault(true)需要被設置爲true來調用上面創建的SearchView.OnCloseListener()onClose()方法。