मैं SearchView प्रोग्रामेटिक रूप से कैसे खोलूं?


102

ActionBar के लिए यह विजेट है जिसे 'SearchView' कहा जाता है। जब यह उपयोग में नहीं है, तो यह इस तरह दिखता है:

यहां छवि विवरण दर्ज करें

और जब यह उपयोग में हो, तो यह इस तरह दिखता है:

यहां छवि विवरण दर्ज करें

मैं चाहता हूं कि सर्चव्यू (इसे "उपयोग में" बनाएं) को खोलें (निश्चित रूप से)।

मैंने कई कार्य किए जैसे:

SearchView searchView = (SearchView) menu.findItem(R.id.menu_search).getActionView();
    searchView.setOnQueryTextListener(this);

    searchView.performClick();
    searchView.requestFocus();

लेकिन उनमें से कोई भी काम नहीं किया ...

XML में SearchView:

<item android:id="@+id/menu_search"
      android:title="Search"
      android:icon="@drawable/ic_action_search"
      android:showAsAction="ifRoom|collapseActionView"
      android:actionViewClass="android.widget.SearchView" />

जवाबों:


255

के SearchViewसाथ विस्तार करें

searchView.setIconified(false);

और इसके साथ पतन

searchView.setIconified(true);

आप का मान बदलने की जरूरत android:showAsActionसे ifRoom|collapseActionViewकरने के लिए always। का SearchViewगुण android:iconifiedByDefaultहोना चाहिए true, जो कि डिफ़ॉल्ट मान है, अन्यथा उपयोगकर्ता SearchViewप्रोग्रामेटिक रूप से विस्तारित होने के बाद इसे ध्वस्त नहीं कर सकता है।


15
नमस्कार, एक कीबोर्ड पॉप-अप होता है लेकिन SearchView नहीं खुलता है।
एली रेवह

1
हैलो, यह भी काम नहीं किया। मैंने XML स्रोत कोड के साथ पोस्ट को अपडेट किया।
एली रेवह

7
यार आप मेरे f * किंग हीरो हैं
Eliseo Ocampos

1
showAsAction = "हमेशा" एक बदसूरत फुलस्क्रीन खोज बार प्रदर्शित करेगा, हालांकि रोटेशन के बाद
फ्रांसेस्को गैब्रीली

1
showAsAction="always"विस्तारित होने पर सर्च आइकन एक्शन बार पर बना रहता है, जो मैन्युअल रूप से खोज पर ध्यान केंद्रित करने पर उपस्थिति जैसा नहीं होता है।
Ixx

75

expandActionView()MenuItem पर कॉल करने का प्रयास करें , नहीं ActionAExViewandand () ActionView पर।

इससे मेरा काम बनता है।

MenuItem searchMenuItem = menu.findItem(R.id.menu_search);
searchView = (SearchView) searchMenuItem.getActionView();
searchMenuItem.expandActionView();

10
सही काम करता है, लेकिन केवल एपीआई के लिए 14. 14. पहले के एपीआई के लिए आप इसका उपयोग कर सकते हैं: MenuItemCompat.expandActionView (searchMenuItem);
आंद्रेई औलास्का

यह सही समाधान है - चयनित एक आपको सेट करने के लिए मजबूर करता है showAsAction: alwaysजो कुछ मुद्दों का कारण बनता है।
Ixx

13

यदि आप आवश्यक होने पर केवल समर्थन पुस्तकालय का उपयोग करना चाहते हैं, तो ऐसा करें

    MenuItem searchMenuItem = menu.findItem(R.id.action_search);
    if (Utils.hasIceCreamSandwich())
        searchMenuItem.expandActionView();
    else MenuItemCompat.expandActionView(searchMenuItem);

बस यह करते हैं

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

6

मुझे पता है कि यह देर हो चुकी है लेकिन

इसे खोलने के लिए ExpandActionView () को कॉल करने का प्रयास करें और इसे बंद करने के लिए CollActionView () को खोलें। आप खोज दृश्य फ़ोकस देने के लिए getActionView () के माध्यम से वास्तविक लड़ाई दृश्य पर requestFocus () को कॉल कर सकते हैं :)


1

माथियास रॉबरट्स के उत्तर का विस्तार:

मैं एक सूची खंड चाहता था ताकि यह खोज मूल्य बना रहे और इसे अन्य खंड से उपयोगकर्ता के वापस आने के बाद सेट किया जा सके।

if (myViewModel.filterTextSaved.isNotEmpty()) { // Kotlin, storing state in ViewModel
    searchItem.expandActionView() // needs to come first, otherwise empty text
    theTextArea.setText(courseViewModel.filterTextOnClick)
}

और मेरे द्वारा रखे गए मेनू के लिए always|collapseActionView, अन्यथा उपयोगकर्ता द्वारा पाठ को हटाने पर यह खुला रहता है।


0

अंत में इसे searchViewरखने का close_buttonउपयोग करने के लिए इसे खोलें onCreate: -

searchView.findViewById(R.id.search_button).performClick();
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.