2012-11-28 19 views
23

मैं इस सप्ताह के साथ संघर्ष कर रहा हूं .. मेरे पास एक वैश्विक खोज है जो उपयोगकर्ता प्रकार के रूप में सुझावों के साथ एक कस्टम सूचीदृश्य प्रदान करती है। जब कोई उपयोगकर्ता कोई विकल्प चुनता है, तो मैं चाहता हूं कि सर्चव्यू पूरी तरह से ध्वस्त स्थिति में लौट जाए।किसी आइटम के चयन के बाद खोज दृश्य को पूरी तरह से कैसे संक्षिप्त करें?

enter image description here

इसके बजाय, यह नीचे सिकुड़ता है लेकिन इसके लिए थोड़ी विस्तृत दृश्य में रहता है।

enter image description here

मैं इसे बंद करने के लिए सब कुछ मैं इस बात पर पा सकते हैं फेंक दिया गया है, लेकिन नहीं करने के लिए मुझे के जीवन सही विधि मिल सकता है। यहाँ समारोह है:

final SearchView.OnCloseListener closeListener = new SearchView.OnCloseListener() { 

     @Override 
     public boolean onClose() { 
      return closeSearch(); 
     } 
    }; 

    protected boolean closeSearch() { 
    _searchView.clearFocus(); 
    _searchView.setQuery("", false); 
    _searchView.setFocusable(false); 
    _searchMenuItem.collapseActionView(); 
    isSearchFragmentVisible(false); 
    return false; 
} 

बंद खोज तो मैन्युअल रूप से कहा जाता है एक आइटम कस्टम "सुझाव" सूचीदृश्य से चयन किया जाता है जब।

+0

searchMenuItem.collapseActionView(); [न्यूजजावा] के लिए धन्यवाद (http://stackoverflow.com/questions/23928253/how-to-dismiss-close-collapse-searchview-in-actionbar-in-mainactivity?rq=1) –

उत्तर

40

इसे मिला। कॉल _searchView.onActionViewCollapsed() होना चाहिए। पृथ्वी पर आप एक "श्रोता" शैली विधि क्यों कहते हैं (यानी, 'ऑन' से शुरू होता है) मेरे बाहर है।

+1

मैं सेबेस्टियन से सहमत हूं: एक का उपयोग करना ' मैं था, एक ActionBar में android.support.v4.view.MenuItemCompat से एक MENUITEM में android.support.v7.widget.SearchView से SearchView, SearchView बुला ' MenuItemCompat.collapseActionView (searchMenuItem) ढह नहीं किया जा सकता कॉल करें 'searchView.onActionViewCollapsed();' "onQueryTextSubmit" कॉलबैक में कॉल करें। कुंजीबार्ड भी खारिज कर दिया गया है। मेरा कीबोर्ड "ओके" बटन लेबल खोज दृश्य के लगातार आमंत्रण के बीच "ठीक" और "अगला" के बीच स्विच करता है। मुझे नहीं पता क्यों वास्तव में। –

+1

_searchView.setIconified (true) मेरे लिए काम किया। – faizal

+0

केवल @Ender Muab'Dib के उत्तर ने मेरे लिए काम किया है, आपको menuSearch.collapseActionView() – Analizer

43

_searchView.onActionViewCollapsed() पर कॉल करने के बजाय menuItem.collapseActionView() पर कॉल करें जहां _searchView = menuItem.getActionView()

+0

पर कॉल करना चाहिए यह सही काम करता है। – wangqi060934

+0

यह स्वीकार्य उत्तर – ercan

+9

होना चाहिए यह एपीआई स्तर 14 और ऊपर के लिए काम करता है। यदि कंपैट लाइब्रेरी का उपयोग करते हैं, तो आप MenuItemCompat.collapseActionView (menuItem) का उपयोग कर सकते हैं; –

17

@ सेबेस्टियन जो वास्तव में सही नहीं है।

मुझे थोड़ी देर के लिए इस मुद्दे पर फंस गया है, लेकिन अंत में मैंने इसे सही तरीके से संभालने में कामयाब रहा है। आपको लगता है कि मेनू Search.collapseActionView() पर कॉल करना है; इसके बजाय। यह विधि पर एक्शन व्यू को पर कॉल करेगी, जिसे आप ओवरराइड कर सकते हैं। तो तुम एक श्रोता फोन नहीं है,)

MenuItem menuSearch = menu.findItem(R.id.itemSearch); 
SearchView searchView = (SearchView) menuSearch.getActionView(); 
//Don't use next line 
//searchView.onActionViewCollapsed(); 
menuSearch.collapseActionView(); 
3

यह मेरे लिए काम किया है और यह भी डिफ़ॉल्ट

MenuItemCompat.collapseActionView(menuItem); 
2

false रिटर्निंग करके कीबोर्ड बंद कर दिया नवीनतम documentation और source code के आधार पर पर्याप्त होना चाहिए ifficonifiedByDefault == true

क्या आपने iconifiedByDefault="false" को परिभाषित किया है या setIconifiedByDefault(false) कहा है?

3

आप खोज को हटाने चाहिए, ध्यान निकालें और फिर कहते हैं:

searchView.setIconified(true); 
0

मैं 'गो' बटन 'अगला' बदल दिया है, इसलिए केवल विधि है कि एपीआई 19 पर मुझे (के लिए काम किया) टाइपिंग closeBtn.performClick(); closeBtn.performClick(); (के OnEditorActionListener में 'बंद करें' बटन दो बार क्लिक करना)। आप AutoCompleteTextView इस तरह प्राप्त कर सकते हैं:

LinearLayout linearLayout1 = (LinearLayout) searchView.getChildAt(0); 
LinearLayout linearLayout2 = (LinearLayout) linearLayout1.getChildAt(2); 
LinearLayout linearLayout3 = (LinearLayout) linearLayout2.getChildAt(1); 
AutoCompleteTextView autoComplete = (AutoCompleteTextView) linearLayout3.getChildAt(0); 
10

आप टूलबार (android.support.v7.widget.Toolbar) और इसी SearchView (android.support.v7.widget उपयोग कर रहे हैं।SearchView) इसके साथ, इस काम करता है:

searchView.setQuery("", false); 
    searchView.clearFocus(); 
    searchView.setIconified(true); 
+1

केवल यह मेरे लिए टूलबार के साथ AppCompat का उपयोग करके और SearchView का समर्थन करने के लिए मेरे लिए काम किया। स्वीकार्य उत्तर होना चाहिए –

+0

महान उत्तर !!! – motis10

+0

धन्यवाद दोस्त !!!! –

0
searchView.setIconified(true); // Call this twice 
searchView.setIconified(true); 

यह मेरे लिए काम करता है।

+0

ऐसा इसलिए है क्योंकि, पहली कॉल टेक्स्ट साफ़ कर देगी और दूसरी कॉल सर्चव्यू को बंद कर देगी। यहां कार्यान्वयन देखें: http://blog.http417.com/2014/07/how-to-close-searchview-programatically.html या https://android.googlesource.com/platform/frameworks/support.git/+ /jb-mr2-release/v7/appcompat/src/android/support/v7/widget/SearchView.java (setIconified विधि के लिए खोजें) 'सार्वजनिक शून्य सेट एकीकृत (बूलियन आइकनिफ़ाई) { अगर (प्रतीक) { onCloseClicked(); } अन्य { onSearchClicked(); } } ' – sunil

0

यह मेरे लिए काम किया searchMenuItem.collapseActionView();

 संबंधित मुद्दे

  • कोई संबंधित समस्या नहीं^_^