11

मैं SearchView के लिए सुझाव प्राप्त करने का प्रयास कर रहा हूं। मैंने इसके लिए एक कस्टम सामग्री प्रदाता लागू किया है। मैंने SearchView के सुझावों को लागू करने के लिए इस link को भी संदर्भित किया है। समस्या मैं का सामना करना पड़ रहा है है, मैं शून्य मान पाने पर searchManager.getSearchableInfo(getComponentName())एंड्रॉइड: getSearchableInfo (getComponentName()) शून्य लौट रहा है?

यहाँ के टुकड़े कर रहे हैं:

AndroidManifest.xml

<application 
    android:icon="@drawable/ic_launcher" 
    android:label="@string/app_name" 
    android:theme="@style/AppTheme" > 

    <provider android:name=".SearchProvider" 
     android:enabled="true" 
     android:authorities="com.example.currentlocationmapdemo" 
     android:grantUriPermissions="true" 
     android:exported="true"> 
     <grant-uri-permission android:pathPattern="*" /> 
    </provider> 
    <uses-library android:name="com.google.android.maps" /> 

    <activity 
     android:name=".MainActivity" 
     android:label="@string/title_activity_main" > 
     <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"/> 
    </activity> 

searchable.xml

<?xml version="1.0" encoding="utf-8"?> 
<searchable xmlns:android="http://schemas.android.com/apk/res/android" 
android:label="label" 
android:hint="hint" 
android:searchSuggestAuthority="com.example.currentlocationmapdemo" 
android:searchSuggestSelection=" ? "> 

MainActivity

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    MenuInflater inflater = getMenuInflater(); 
    inflater.inflate(R.menu.searchview_in_menu, menu); 
    MenuItem searchItem = menu.findItem(R.id.action_search); 
    mSearchView = (SearchView) searchItem.getActionView(); 
    SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE); 
SearchableInfo info = searchManager.getSearchableInfo(getComponentName()); // null returned 
mSearchView.setSearchableInfo(info); 

return true; 
} 

उत्तर

17

कम से कम अपने गतिविधियों में से एक के लिए - एक आप कर रहे हैं नहीं, तो searchManager.getSearchableInfo(getComponentName()) हमेशा अशक्त देता है, और अपने विन्यास को नजरअंदाज कर दिया जाता है, तो

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

: प्रकट में यह में इस आशय फिल्टर होना आवश्यक है - से खोज के लिए पर्याप्त है।

इसने मुझे एक दिन के लिए मार डाला - मैंने सोचा कि यह एक्शनबैरशेल-संबंधित था, लेकिन यह इसके साथ ठीक काम नहीं करता है। समस्या यह थी कि मैं नमूना शॉर्ट-सर्किट करने की कोशिश कर रहा था, जैसा कि आपके पास भी है :-)

+1

एक नोट के रूप में, वर्तमान में मैं केवल इसे काम पर ला सकता हूं यदि इरादा-फ़िल्टर वर्तमान गतिविधि में है। यह बहुत बढ़िया है, क्योंकि मैं इसे खोज परिणामों को प्रदर्शित करने के लिए किसी अन्य गतिविधि पर जाना चाहता हूं। यदि आप जानते हैं कि इसके साथ क्या चल रहा है, तो मैं सुनकर आभारी रहूंगा। – Erhannis

+0

इस पर खोए गए घंटे। यह इरादा फ़िल्टर गायब था। –

8

मुझे लगता है कि अपने दृष्टिकोण गलत है। आपके पास 2 गतिविधियां होनी चाहिए - 1: मुख्य गतिविधि जिसमें खोज दृश्य (एक्शनबार या लेआउट पर) और 2: सर्च एक्टिविटी है जो खोज के दौरान शुरू की जाएगी।

शायद आप इसे ऐसा भी कर सकते हैं लेकिन मुझे यकीन नहीं है। आप अपने दृष्टिकोण में ACTION_SEARCH इरादे को कहां से प्राप्त करना चाहेंगे? आम तौर पर आप इस तरह अपने searchActivity में OnCreate में ऐसा:

Intent intent = getIntent(); 
if (Intent.ACTION_SEARCH.equals(intent.getAction())) { 
    String query = intent.getStringExtra(SearchManager.QUERY); 
    System.out.println("searching for: " + query); 
} 

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

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

प्रकट मेरे MainActivity

+0

मेरा कार्यान्वयन वास्तव में सही था। समस्या एक बहुत मूर्खतापूर्ण थी। मैं ' ' menu.xml में चूक गया था। हालांकि, एक्सएमएल फ़ाइल में कोई त्रुटि नहीं आई है। – FireAndIce

+4

'default_searchable' विशेषता केवल एक चीज है जिसे आधिकारिक रूप से दस्तावेज नहीं किया गया है। धन्यवाद! मुझे पागल कर दिया। एंड्रॉइड प्रलेखन एक मजाक है। – EinLama

1

आपकी searchable.xml में स्ट्रिंग अक्षर (संकेत और लेबल) शामिल हैं, उन्हें संदर्भ होना चाहिए। इस वजह से यह असफल हो जाता है: SearchInfo always coming out null