2010-07-05 11 views
8

में नई गतिविधियां बनाता है I Android पर एक टैबड एप्लिकेशन विकसित करना चाहता हूं। साथ ही, मैं कुछ टैब पर खोज कार्यक्षमता मौजूद होना चाहता हूं। इस कारण से, मैंने मैनिफेस्ट फ़ाइल में कुछ गतिविधियां घोषित कीं और उन्हें टैबहोस्ट में जोड़ा। लेकिन समस्या यह है कि जब मैं कोई खोज करता हूं, तो यह वर्तमान गतिविधि की क्रिएट() विधि को कॉल करता है जो टैब सामग्री में रहता है। मैं चाहता हूं कि खोज प्रबंधक को न्यूइन्टेंट() विधि पर कॉल करें ताकि एक नई गतिविधि नहीं बनाई जा सके और मैं मौजूदा गतिविधि में खोज को संभाल सकूं। मैं अपने प्रकट और TabActivity स्रोत फ़ाइल पोस्टिंग कर रहा हूँ और अधिक स्पष्ट होने के लिए:खोज TabActivity

मैनिफ़ेस्ट फ़ाइल का हिस्सा:

<activity 
    android:name="KarniyarikTabsWidget" 
    android:label="@string/app_name" 
    android:theme="@android:style/Theme.NoTitleBar" 
    android:launchMode="singleTop"> 
    <intent-filter> 
    <action android:name="android.intent.action.MAIN" /> 
    <category android:name="android.intent.category.LAUNCHER" /> 
    </intent-filter> 
    </activity> 
    <activity android:name="UrunTab" 
    android:theme="@android:style/Theme.NoTitleBar" 
    android:launchMode="singleTop"> 
    <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="ArabaTab" android:theme="@android:style/Theme.NoTitleBar" 
    android:launchMode="singleTop"> 
    <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="GecmisTab" android:theme="@android:style/Theme.NoTitleBar" 
    android:launchMode="singleTop"> 
    </activity> 
    <activity android:name="HakkindaTab" android:theme="@android:style/Theme.NoTitleBar" 
    android:launchMode="singleTop"> 
    </activity> 

टैब गतिविधि onCreate विधि:

public class KarniyarikTabsWidget extends TabActivity { 
    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     Resources res = getResources(); // Resource object to get Drawables 
     TabHost tabHost = getTabHost(); // The activity TabHost 
     TabHost.TabSpec spec; // Resusable TabSpec for each tab 

     // Initialize a TabSpec for each tab and add it to the TabHost 
     spec = tabHost.newTabSpec("UrunTab") 
     .setIndicator("Ürün",res.getDrawable(R.drawable.product)) 
     .setContent(new Intent(this, UrunTab.class)); 
     tabHost.addTab(spec); 

     //Do the same for other tabs 
     spec = tabHost.newTabSpec("ArabaTab") 
      .setIndicator("Araba",res.getDrawable(R.drawable.car)) 
      .setContent(new Intent(this, ArabaTab.class)); 
     tabHost.addTab(spec); 

     //Do the same for other tabs 
     spec = tabHost.newTabSpec("GecmisTab") 
      .setIndicator("Geçmiş",res.getDrawable(R.drawable.history)) 
      .setContent(new Intent(this, GecmisTab.class)); 
     tabHost.addTab(spec); 

     //Do the same for other tabs 
     spec = tabHost.newTabSpec("HakkindaTab") 
     .setIndicator("Hakkında",res.getDrawable(R.drawable.about)) 
      .setContent(new Intent(this, HakkindaTab.class)); 
     tabHost.addTab(spec); 
    } 
+0

मुझे लगता है कि ये दो बग संबंधित हैं: http://code.google.com/p/android/issues/detail?id=17137 http://code.google.com/p/android/issues/detail? आईडी = 4155 – Agos

+0

क्या आपने इसे हल किया? –

उत्तर

1

सुनिश्चित नहीं हैं कि आप मिल गया है अगर एक इसका उत्तर, लेकिन मुझे एक संबंधित समस्या हो रही थी कि मैं एक खोज योग्यता के मेनू से खोज यूआई दिखाने की कोशिश कर रहा था (यानी, खोज जो भी टैब सक्रिय हो, चाहे वह दिखाना चाहिए), और यह प्रदर्शित नहीं हो रहा था अप।

खोज संवाद नहीं है, डिफ़ॉल्ट रूप से, आपके आवेदन के हर गतिविधि से उपलब्ध: काफी अनुसंधान और 'Search' article ध्यान से पढ़ने का एक सा के बाद, मैं निम्नलिखित पैराग्राफ देखा। इसके बजाय, खोज संवाद केवल उपयोगकर्ताओं को प्रस्तुत किया जाता है जब वे आपके आवेदन के खोज योग्य संदर्भ से खोज का आह्वान करते हैं। एक खोजने योग्य संदर्भ कोई गतिविधि है जिसके लिए आपने मेनिफेस्ट फ़ाइल में खोजने योग्य मेटा-डेटा घोषित किया है। उदाहरण के लिए, खोजने योग्य गतिविधि स्वयं (उपरोक्त मैनिफेस्ट स्निपेट में घोषित) एक खोज योग्य संदर्भ है क्योंकि इसमें मेटा-डेटा शामिल है जो खोजने योग्य कॉन्फ़िगरेशन को परिभाषित करता है। आपके आवेदन में कोई अन्य गतिविधि एक खोज योग्य संदर्भ नहीं है, डिफ़ॉल्ट रूप से, और इस प्रकार, खोज संवाद प्रकट नहीं करता है। हालांकि, आप शायद अपनी अन्य गतिविधियों से खोज संवाद उपलब्ध करना चाहते हैं (और खोजकर्ता गतिविधि को लॉन्च करने के लिए जब उपयोगकर्ता खोज निष्पादित करता है)। आप ठीक वही कर सकते हैं।

आप यह भी नियंत्रित कर सकते हैं कि कौन सी गतिविधियां अधिक बारीक स्तर पर खोज प्रदान करती हैं। एक खोज योग्य संदर्भ के रूप में केवल एक व्यक्तिगत गतिविधि निर्दिष्ट करने के लिए, संबंधित तत्व (तत्व के अंदर के बजाय) के अंदर "android.app.default_searchable" नाम के साथ रखें। असामान्य होने पर, आप एक से अधिक खोज योग्य गतिविधि भी बना सकते हैं और प्रत्येक व्यक्ति में एक अलग खोज योग्य गतिविधि घोषित करके या पूरे एप्लिकेशन के लिए एक डिफ़ॉल्ट खोज योग्य गतिविधि घोषित करके और फिर इसे ओवरराइड करके अपने आवेदन के विभिन्न संदर्भों में प्रत्येक को प्रदान कर सकते हैं। कुछ गतिविधियों के अंदर एक तत्व। (यदि आप डेटा है कि एक ही खोजा गतिविधि के द्वारा नियंत्रित नहीं किया जा सकता, वर्तमान में खुले गतिविधि पर निर्भर करता है के विभिन्न सेट खोज करना चाहते हैं तो आप ऐसा नहीं कर सकते हैं।)

संक्षेप में, आप खोज मेटा होनी चाहिए उस विशिष्ट गतिविधि के लिए डेटा जिसमें से आप onSearchRequested() पर कॉल कर रहे हैं। इतना ही नहीं, इन अन्य गतिविधियों में मेटा डेटा default_searchable के रूप में नाम है और खोज गतिविधि का उल्लेख करना चाहिए, और नहीं एक्सएमएल खोज योग्य फ़ाइल है, तो जैसे:

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

देखा आप खोज मेटा डेटा है दो स्थानों में गलत

संबंधित मुद्दे