2010-07-05 7 views
8

'da yeni etkinlikler oluşturur. Android'de sekmeli bir uygulama geliştirmek istiyorum. Aynı zamanda, arama fonksiyonlarının bazı sekmelerde bulunmasını istiyorum. Bu nedenle, manifest dosyasında bazı aktiviteleri ilan ettim ve TabHost'a ekledim. Ancak sorun, bir arama yaptığımda, sekme içeriğinde bulunan mevcut etkinliğin onCreate() yöntemini çağırmasıdır. İstediğim, searchManager'ın onNewIntent() yöntemini çağırması ve böylece yeni bir etkinliğin oluşturulmaması ve mevcut etkinlikteki aramayı işleyebilmesidir. Benim tezahür ve TabActivity kaynak dosyasını post ediyorum daha anlaşılır olması için: Bildiri dosyasınınSearch, TabActivity

Bölüm:

<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> 

Sekme Etkinlik onCreate yöntemi:

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

Bu iki hatanın ilişkili olduğunu düşünüyorum: http://code.google.com/p/android/issues/detail?id=17137 http://code.google.com/p/android/issues/detail? id = 4155 – Agos

+0

bunu çözdünüz mü? –

cevap

1

emin değil misiniz bulduk eğer bir Buna cevap olarak, ancak arama UI'sinin bir tabactivite menüsünden gösterilmesini sağlamakla ilgili bir sorunla karşılaşıyordum (yani, arama, hangi sekmenin etkin olduğuna bakmaksızın görünmelidir) ve gösterilmiyordu. yukarı.

arama iletişim değil, varsayılan olarak, uygulamanın her Aktivite edinilebilir: araştırma ve dikkatle 'Search' article okuma biraz sonra, ben aşağıdaki paragrafı ettim. Bunun yerine, arama iletişim kutusu, kullanıcılara yalnızca uygulamanızın aranabilir bir bağlamından arama başlattıklarında sunulur. Aranabilir bir içerik, bildirim dosyasında aranabilir meta verileri bildirdiğiniz herhangi bir Etkinliktir. Örneğin, aranabilir Faaliyetin kendisi (yukarıdaki manifesto snippet'inde bildirilir) aranabilir bir bağlamdır çünkü arama yapılabilen yapılandırmayı tanımlayan meta verileri içerir. Uygulamanızdaki diğer herhangi bir Etkinlik, varsayılan olarak aranabilir bir bağlam değildir ve bu nedenle, arama iletişim kutusunu göstermez. Ancak, muhtemelen arama iletişim kutusunun diğer etkinliklerinizden kullanılabilir olmasını (ve kullanıcı bir arama yürüttüğünde aranabilir Etkinlik'i başlatmak) isteyebilirsiniz. Bunu tam olarak yapabilirsin.

Ayrıca, hangi etkinliklerin daha ayrıntılı bir düzeyde arama sağladığını da kontrol edebilirsiniz. Aranabilir bir içerik olarak yalnızca tek bir Etkinlik belirtmek için, ilgili öğenin içinde (öğenin içinde değil) "android.app.default_searchable" adıyla yerleştirin. Nadiren de olsa, birden fazla aranabilir Etkinlik oluşturabilir ve her bir öğede farklı bir aranabilir Etkinlik bildirerek ya da uygulamanın tamamı için varsayılan aranabilir bir Etkinlik bildirerek ve ardından bunu geçersiz kılarak, uygulamanızın farklı bağlamlarında her birini sağlayabilirsiniz. Belirli faaliyetlerin içinde bir element. (Şu anda açık Aktivite bağlı olarak aynı aranabilir Aktivite tarafından ele alınamaz farklı veri setlerini aramak isterseniz bunu yapabilirsiniz.) Kısacası

, arama meta olması gerekir onSearchRequested() aradığınız belirli etkinlik verileri. Sadece bu değil, bu etkinliklere meta veri default_searchable olarak adı var ve arama faaliyeti söz değil, xml aranabilir dosya, şöyle olmalıdır:

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

arama meta veriye sahip olduğunu fark iki yerde yanlış.