11

लौटाता है मैंने गतिविधि में एक खोज बार जोड़ने के लिए this Android guide का पालन किया है।searchManager.getSearchableInfo (getComponentName()) शून्य पर

रेस/मेनू/activity_main.xml:

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

<item 
    android:id="@+id/search" 
    android:title="@string/menu_search" 
    android:icon="@android:drawable/ic_menu_search" 
    android:showAsAction="collapseActionView|ifRoom" 
    android:actionViewClass="android.widget.SearchView" /> 
<item 
    android:id="@+id/menu_settings" 
    android:orderInCategory="100" 
    android:showAsAction="never" 
    android:title="@string/menu_settings" 
    android:icon="@drawable/ic_menu_settings"/> 

</menu> 

रेस/xml/searchable.xml: मैनिफ़ेस्ट फ़ाइल में

<?xml version="1.0" encoding="utf-8"?> 
<searchable xmlns:android="http://schemas.android.com/apk/res/android" 
    android:label="@string/app_name" 
    android:hint="@string/search_hint" /> 

गतिविधि प्रविष्टि:

<activity 
     android:name="de.ivu.realtime.app.activity.MainActivity" 
     android:label="@string/app_name" > 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 
      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
     <meta-data 
      android:name="android.app.searchable" 
      android:resource="@xml/searchable" /> 
     <meta-data 
      android:name="android.app.default_searchable" 
      android:value="de.ivu.realtime.app.activity.MainActivity" /> 
    </activity> 
सेटअप इस तरह दिखता है

और मुख्य गतिविधि में कोड:

@SuppressLint("NewApi") 
@Override 
public boolean onCreateOptionsMenu(Menu menu) 
{ 
    this.getMenuInflater().inflate(R.menu.activity_main, menu); 

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) 
    { 
     SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE); 
     SearchView searchView = (SearchView) menu.findItem(R.id.menu_search).getActionView(); 
     SearchableInfo searchableInfo = searchManager.getSearchableInfo(getComponentName()); 
     searchView.setSearchableInfo(searchableInfo); 
    } 

    return true; 

searchManager.getSearchableInfo(getComponentName()); पर कॉल हमेशा null पर लौटाता है। मैंने इसे स्टैक ओवरफ्लो पर अन्य प्रश्नों में देखा है, हालांकि, मेरे द्वारा लागू किए गए समाधानों में से कोई भी मेरे मामले पर लागू नहीं होता है।

  • मेनू एक्सएमएल एक <?xml version="1.0" encoding="utf-8"?> हैडर
  • खोजा एक्सएमएल कोई हार्ड-कोडेड है तार
  • मेनू आइटम का नाम बदलने से काम नहीं करता
  • सफाई और पुनर्निर्माण चाल नहीं करता है या तो

किसी भी मदद की बहुत सराहना की है। धन्यवाद!

+0

संभावित डुप्लिकेट [कार्य करने के लिए एक्शनबार में सर्चव्यू नहीं मिल सकता] [http://stackoverflow.com/questions/11699206/cannot-get-searchview-in-actionbar-to-work) – Krizai

उत्तर

9

गतिविधि के लिए यह जोड़े जहां मेरे मामले समस्या ActionBarSherlock के साथ एकीकरण के दौरान मेरी गलती थी में अपने SearchView

<meta-data 
    android:name="android.app.default_searchable" 
    android:value=".activity_that_handles_the_search" /> 

<intent-filter> 
    <action android:name="android.intent.action.SEARCH" /> 
</intent-filter> 
+0

आपके उत्तर के लिए धन्यवाद। 'SearchView' 'एक्शनबार' में है (अपडेट किए गए प्रश्न देखें)। चूंकि 'मुख्य क्रियाशीलता' में संसाधन परिणाम प्रदान करने के लिए संसाधन हैं, इसलिए मैंने आपके कोड को 'मुख्य क्रियाशीलता' सेक्शन में जोड़ा है। फिर भी, 'searchManager.getSearchableInfo (getComponentName()); '' null' देता है। – Chris

+0

उत्तर अद्यतन किया गया। अभी तक एक और इरादा-फ़िल्टर लागू करने का प्रयास करें। –

+0

धन्यवाद, यह काम करता है! इस अन्य गाइड का उपयोग http://developer.android.com/guide/topics/search/search-dialog.html, मैंने अभी यह भी पता लगाया है :-)। – Chris

2

रख दिया है। इस मामले में android:actionViewClassandroid.widget.SearchView के बजाय com.actionbarsherlock.widget.SearchView होना चाहिए। मुझे पता है कि यह गूंगा लगता है, लेकिन मैंने यह पता लगाने की कोशिश में 20 मिनट बिताए कि क्यों searchViewnull है जो आपके कोड में है।

+0

मेरा मुद्दा दूसरी तरफ था। मैंने एक्शनबार शेरलॉक को एकीकृत किया था और इसे ऐप अपडेट में हटा दिया गया था। com.actionbarsherlock.widget.SearchView को हटाया जाना चाहिए और android.widget के साथ प्रतिस्थापित किया जाना चाहिए।सर्च व्यू –

1

बदलें:

android:actionViewClass="android.widget.SearchView" 

के साथ:

app:actionViewClass="android.widget.SearchView" 

क्योंकि app अक्सर अगर आप समर्थन पुस्तकालय का उपयोग कर रहे प्रयोग किया जाता है।

+0

सुपर! ... धन्यवाद – Khalil