2012-08-08 10 views
6

मैं एक्शन बार में एक खोज बार विजेट का उपयोग करके अपने एंड्रॉइड एप्लिकेशन पर एक खोज को लागू करने की कोशिश कर रहा हूं।खोज बार विजेट खोज योग्य गतिविधि शुरू नहीं कर रहा है

मैं अनुसरण कर रहा हूं

http://developer.android.com/guide/topics/search/search-dialog.html http://developer.android.com/guide/topics/ui/actionbar.html#ActionView

ट्यूटोरियल इस किया पाने के लिए।

मेरे पास खोज में शामिल दो गतिविधियां हैं। सर्चबार गतिविधि में एक्शन बार है और AcceptSearch मेरी खोज योग्य गतिविधि है। हालांकि मैंने घोषणा की कि कौन सी गतिविधि खोजने योग्य गतिविधि थी, क्वेरी को स्वीकार्य खोज पर नहीं भेजा जा रहा है और गतिविधि लॉन्च नहीं की गई है।

मैंने खोज बार को कॉन्फ़िगर किया है कि विजेट खाली होने पर एक खोज बार संकेत दिखाई देता है, लेकिन संकेत कभी भी प्रकट नहीं होता है। मेरा कोड यहाँ है।

SearchBar

public class SearchBar extends Activity 
{ 

@Override 
protected void onCreate(Bundle savedInstanceState) 
{ 
    // TODO Auto-generated method stub 
    super.onCreate(savedInstanceState); 

    setContentView(R.layout.search_bar); 
} 

@Override 
public boolean onCreateOptionsMenu(Menu menu) 
{ 
    //Inflate the options menu from XML 
    MenuInflater inflater = getMenuInflater(); 
    inflater.inflate(R.menu.options_menu, menu); 

    // Get the SearchView and set the searchable configuration 
    SearchManager searchManager = (SearchManager)getSystemService(Context.SEARCH_SERVICE); 
    SearchView searchView = (SearchView) menu.findItem(R.id.menu_search).getActionView(); 
    searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName())); 
    searchView.setIconifiedByDefault(false);   
    return true;   
} 

AcceptSearch

public class AcceptSearch extends ListActivity 
{ 
@Override 
protected void onCreate(Bundle savedInstanceState) 
{  
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_splash_screen); 

    //Get the intent, verify the action and get the query 
    Intent intent = getIntent(); 
    if(Intent.ACTION_SEARCH.equals(intent.getAction())) 
    { 
     String query = intent.getStringExtra(SearchManager.QUERY); 

     //Start the search 
     doMySearch(); 
    } 
} 

Searchable.xml

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

options_menu

<?xml version="1.0" encoding="utf-8"?> 
<menu xmlns:android="http://schemas.android.com/apk/res/android" >  
<item 
    android:title="Help" 
    android:id="@+id/menu_help" 
    android:showAsAction="always" 
/> 
<item 
    android:title="Categories" 
    android:id="@+id/menu_cats" 
    android:showAsAction="always" 
/> 
<item 
    android:id="@+id/menu_search" 
    android:title="Search with Searchlet" 
    android:icon="@drawable/ic_action_search" 
    android:showAsAction="ifRoom|collapseActionView" 
    android:actionViewClass="android.widget.SearchView"/> 
</menu> 

प्रकट

<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.example.searchlet" 
    android:versionCode="1" 
    android:versionName="1.0" > 

<uses-sdk 
    android:minSdkVersion="11" 
    android:targetSdkVersion="15" /> 

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

    <activity 
     android:name=".SplashScreenActivity" 
     android:label="@string/title_activity_splash_screen" 
     android:screenOrientation="portrait" > 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 
      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 

    <activity 
     android:name=".AcceptSearch"> 
     <intent-filter> 
      <action android:name="android.intent.action.SEARCH" /> 
     </intent-filter> 
     <meta-data android:name="android.app.searchable" 
      android:resource="@xml/searchable"/> 
    </activity> 

    <activity android:name=".SearchBar" 
       android:label="@string/app_name">     
     <intent-filter> 
      <action android:name="com.example.searchlet.CLEARSCREEN" /> 
      <category android:name="android.intent.category.DEFAULT" /> 

     </intent-filter> 
    </activity> 

</application> 

</manifest> 

मैं thats मानना ​​है कि सभी आवश्यक जानकारी स्थिति से बनाना।

सभी को अग्रिम धन्यवाद। मैं पकड़ता हूँ

+0

को यू इस समस्या का समाधान हो गया है? यदि हां कृपया मुझे बताएं कि मैं यहां भी फंस गया हूं। –

+0

@ ललित क्या आपको समाधान मिला है? मैं यहाँ भी अटक गया हूँ। – Solace

उत्तर

7

मुझे एक ही समस्या थी। मैं grokking's tutorial का पालन कर रहा था और गतिविधि कभी नहीं खोली गई। मैंने इंड्रेक के समाधानों की कोशिश की जो मेरे लिए काम करता है।

आपको यह सुनिश्चित करना चाहिए कि आपके पास दाहिने माता-पिता के नीचे सही मेटा-डेटा है। मेटा-डेटा

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

आवेदन के तहत होना चाहिए। अनुवर्ती मेटा-डेटा

<meta-data 
    android:name="android.app.searchable" 
    android:resource="@xml/searchable" /> 

AndroidManifest.xml के अंदर खोज गतिविधि पैरामीटर के अंतर्गत होना चाहिए।

खोज गतिविधि में मैंने गतिविधि स्टैक के प्रबंधन से पहले जुड़े ट्यूटोरियल में जो कहा वह किया। मुझे उम्मीद है कि यह समाधान एक ही समस्या वाले सभी के लिए काम करता है।

18

ट्यूटोरियल में एक महत्वपूर्ण हिस्सा गायब प्रतीत होता है। आपको टैग के अंदर <meta-data android:name="android.app.default_searchable" android:value=".MySearchActivityName" /> जोड़ना होगा।

+0

धन्यवाद, मैं सुबह में इस समाधान का प्रयास करूंगा। (Sry देर उत्तर के लिए) – myselfesteem

+1

हां, कि नहीं पर है कि एक :( – myselfesteem

+0

धन्यवाद जवाब था, यह मुझे मदद की। –

1

आप 'सर्चबार' में मेटा-डेटा गायब हैं, जिसमें मैनिफेस्ट फ़ाइल की गतिविधि है, जो 'को निर्देशित करता है।स्वीकृति खोज 'गतिविधि।

जोड़े '.SearchBar' गतिविधि के लिए मेटा डेटा निम्नलिखित:

<!-- search widget target activity--> 
     <meta-data android:name="android.app.default_searchable" 
        android:value=".AcceptSearch" /> 

यहाँ '.SearchBar की गतिविधि प्रकट करने के लिए कोड अद्यतन किया जाता है।

<activity android:name=".SearchBar" 
       android:label="@string/app_name"> 
     <!-- search widget target activity--> 
     <meta-data android:name="android.app.default_searchable" 
       android:value=".AcceptSearch" /> 
     <intent-filter> 
      <action android:name="com.example.searchlet.CLEARSCREEN" /> 
      <category android:name="android.intent.category.DEFAULT" /> 
     </intent-filter> 
    </activity> 
2

पाउ अरलैंडिस मार्टिनेज, धन्यवाद। आपका समाधान ठीक काम करता है और गतिविधि स्टैक के साथ ट्यूटोरियल सहायक है। मैं <application> अनुभाग में इस मेटा डेटा डाल:

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

और मैंने देखा है कि @Override onQueryTextSubmit विधि झूठे लौट जाना खोजा गतिविधि शुरू करने के लिए। अन्यथा वर्चुअल कीबोर्ड पर खोज बटन काम नहीं करता है।

+0

अरे, क्योंकि यह मूल प्रश्न पर कोई जवाब नहीं है, यदि आप चीजों को स्पष्ट करने के लिए इसे संदर्भित करते हुए उत्तर के रूप में टिप्पणी करते हैं तो यह बहुत अच्छा होगा। – ChristianM

0

searchable.xml में संकेत और लेबल संदर्भ हैं, और हार्डकोडेड तार नहीं हैं।

<searchable xmlns:android="http://schemas.android.com/apk/res/android" 
     android:hint="@string/search_hint" 
     android:label="@string/app_name"/> 

यह कैसे गतिविधि जो SearchView विजेट शामिल प्रकट में खोज-गतिविधि के लिए प्रकट

<activity 
    android:name="ACTIVITY PATH WHICH CONTAINS SEARCHVIEW WIDGET"> 

     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 
      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 

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

</activity> 

घोषणा में घोषित किया जाना चाहिए।

<activity android:name=".SearchableActivity"> 

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

     <meta-data 
      android:name="android.app.searchable" 
      android:resource="@xml/searchable" /> 

</activity> 
0

मैं SearchView साथ परेशानी हो रही किया गया था नहीं SearchActivity की शुरूआत, यह पता चला एक पैकेज/निर्देशिका मुद्दा।

SearchableActivityActivity रूप में एक ही निर्देशिका की मेजबानी में स्थित नहीं है, तो अपने SearchView, आप को बदलने की जरूरत:

searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName())); 

searchView.setSearchableInfo(searchManager.getSearchableInfo(new ComponentName(this, SearchableActivity.class))); 
संबंधित मुद्दे