2016-05-04 14 views
10

मैं खोज दृश्य को प्रदर्शित करने के साथ-साथ खोज परिणामों को प्रदर्शित करने के लिए एक ही गतिविधि का उपयोग कर रहा हूं। खोज परिणाम केवल आइटमों का एक उप-समूह है, इसलिए खोज फ़िल्टर के रूप में कार्य करती है। सबकुछ ठीक काम करता प्रतीत होता है सिवाय इसके कि मैं यह नहीं समझ सकता कि खोज में सभी वस्तुओं को कैसे पुनर्स्थापित करना है जब खोज दृश्य का बैक बटन क्लिक किया गया है।SearchView के बैक बटन प्रेस का पता कैसे लगाएं?

या शायद कोई अन्य तरीका यह पता लगाने का एक और तरीका है कि कोई उपयोगकर्ता खोज परिणामों से पिछली बार (जब, मेरे मामले में, वही दृश्य) पर जाता है।

धन्यवाद

+0

यहाँ एक नज़र http://stackoverflow.com/questions/25842555/how-to-handle-back-button-of-search-view ले लो -इन-एंड्रॉइड –

+1

मती राडू, लिंक के लिए धन्यवाद जो मुझे आवश्यक सभी जानकारी प्रदान करता है - जिसमें th3pat3I उत्तर पर विस्तार शामिल है। – bdristan

+1

@bdristan मैंने अपना जवाब अपडेट करने के बाद अब देखा है कि @MateiRadu ने आपको 'SearchView' खोलने/बंद करने के लिए सही उत्तर के साथ आपूर्ति की है। हालांकि मुझे उम्मीद है कि मेरा जवाब अभी भी मदद करता है क्योंकि इसमें कुछ हद तक स्पष्टीकरण है कि यह अब क्यों काम नहीं करता है :-) – Darwind

उत्तर

24

तो अपने प्रश्न के शीर्षक को देखकर, आप और सुनिश्चित करें कि कैसे जब SearchView बंद हो रहा है पता लगाने के लिए नहीं कर रहे हैं इसलिए आप "सामान्य" राज्य जब करने के लिए अपने विचारों को बहाल करने में सक्षम नहीं हैं SearchView अब खुला नहीं है। इस तरह से अपनी SearchView को SearchView.OnCloseListener,:

Android 4.0+ के रूप में

पुराने समाधान (सरल) समाधान एक जोड़ने के लिए है

SearchView.setOnCloseListener(new SearchView.OnCloseListener() { 
    @Override 
    public boolean onClose() { 
     // This is where you can be notified when the `SearchView` is closed 
     // and change your views you see fit. 
    } 
}); 

संपादित:

अद्यतन समाधान जो एंड्रॉइड 4.0+

01 में काम करता है

जाहिर है OnCloseListener छोटी है और एंड्रॉइड (4.0+) के नए संस्करणों पर काम नहीं करता है। देखें: https://code.google.com/p/android/issues/detail?id=25758

इस का हल SearchView का समर्थन पुस्तकालय संस्करण का उपयोग करने के लिए है:

मेरे onCreateOptionsMenu इस तरह दिखता है:

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    getMenuInflater().inflate(R.menu.menu, menu); 

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

    MenuItemCompat.setOnActionExpandListener(searchMenuItem, new MenuItemCompat.OnActionExpandListener() { 
     @Override 
     public boolean onMenuItemActionExpand(MenuItem item) { 
      Toast.makeText(ScrollingActivity.this, "onMenuItemActionExpand called", Toast.LENGTH_SHORT).show(); 
      return true; 
     } 

     @Override 
     public boolean onMenuItemActionCollapse(MenuItem item) { 
      Toast.makeText(ScrollingActivity.this, "onMenutItemActionCollapse called", Toast.LENGTH_SHORT).show(); 
      return true; 
     } 
    }); 
} 

क्यों गूगल नहीं भी परवाह लिखने के लिए किया था प्रलेखन में एक टिप्पणी मुझे नहीं पता, लेकिन यह उदास है।

EDIT2:

how to handle back button of Search View in android

यह भी पता चलता है OnCloseListener के बजाय OnActionExpandListener का उपयोग कैसे करें:

बस कड़ी जो टिप्पणी में जोड़ा @MateiRadu जोड़ने।

उम्मीद है कि इससे मदद मिलती है।

+0

दुर्भाग्यवश ऑनक्लोज़() को SearchView बंद होने पर नहीं कहा जा रहा है। हालांकि, onQueryTextSubmit() और onQueryTextChange() - जैसा कि th3pat3l द्वारा सुझाया गया है - कॉल करें। आदर्श रूप में मैं सभी तीन श्रोताओं का उपयोग करना चाहता हूं। – bdristan

+0

@bdristan मैंने अपना जवाब अपडेट कर दिया है। – Darwind

+0

यदि आपके पास अपनी खुद की खोज दृश्य कस्टम क्लास का उपयोग है: @Averride सार्वजनिक शून्य परActionViewCollapsed() { super.onActionViewCollapsed(); } – Mike6679

4

दारविंद का जवाब नौकरी करेगा, लेकिन यह तब काम करता है जब उपयोगकर्ता कुंजीपटल को बंद करने के लिए बैक बटन दबाता है और SearchView पर अब ध्यान केंद्रित नहीं होता है।

ऐसा करने का बेहतर तरीका SearchView के टेक्स्ट परिवर्तनों को सुनना है।
इस तरह आप पाठ को अद्यतन कर रहे हैं क्योंकि दृश्यों को पुनर्स्थापित कर सकते हैं और यूआई को नियंत्रित कर सकते हैं।
यहां मैं यह कैसे करता हूं।

SearchView searchView = new SearchView(context); 
searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() { 
    @Override 
    public boolean onQueryTextSubmit(String query) { 
     // this is when user is done typing and clicks search 
     return false; 
    } 

    @Override 
    public boolean onQueryTextChange(String newText) { 
     // you can use this to do a "live" search while the user is typing. 
     // this will trigger each time user changes (adds or removes) text 
     // so when newText is empty, restore your views 
     return false; 
    } 
}); 
0

वहाँ एक अन्य चाल है:

searchView.setOnSearchViewListener(new MaterialSearchView.SearchViewListener() { 
       @Override 
       public void onSearchViewShown() { 
        if(!txtToolbarTitle.getText().toString().isEmpty()){ 
         searchView.setQuery(txtToolbarTitle.getText().toString()+ " ", false); 
        } 
       } 

       @Override 
       public void onSearchViewClosed() { 
        if(txtToolbarTitle.getText().toString().isEmpty()){ 
         finish(); 
        } 
       } 
      }); 
संबंधित मुद्दे