2010-07-05 13 views
8

Ich möchte eine Anwendung mit Tabs auf Android entwickeln. Gleichzeitig möchte ich, dass die Suchfunktionalität auf einigen Tabs vorhanden ist. Aus diesem Grund habe ich einige Aktivitäten in der Manifestdatei deklariert und zu TabHost hinzugefügt. Aber das Problem ist, dass wenn ich eine Suche mache, es onCreate() -Methode der aktuellen Aktivität aufruft, die sich im Tab-Inhalt befand. Ich möchte, dass der searchManager die onNewIntent() -Methode aufruft, so dass keine neue Aktivität erstellt wird und ich die Suche in vorhandenen Aktivitäten durchführen kann. Ich meine offenkundige und TabActivity Quelldatei Posting mehr klar zu sein:Die Suche erstellt neue Aktivitäten in TabActivity

Ein Teil der Manifest-Datei:

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

Tab Aktivität onCreate Methode:

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

Ich denke, diese beiden Bugs sind verwandt: http://code.google.com/p/android/issues/detail?id=17137 http://code.google.com/p/android/issues/detail? id = 4155 – Agos

+0

hast du das gelöst? –

Antwort

1

Nicht sicher, ob Sie haben festgestellt, ein Beantworten Sie dies, aber ich hatte ein damit verbundenes Problem, indem ich versuchte, die Suchoberfläche aus einem Menü einer Tabactivity zu zeigen (dh die Suche sollte unabhängig von der jeweils aktiven Registerkarte auftauchen), und sie wurde nicht angezeigt oben. Nach einem recht wenig Forschung und die 'Search' article sorgfältig zu lesen, bemerkte ich den folgenden Absatz:

Der Dialog Suche ist nicht standardmäßig von jeder Aktivität Ihrer Anwendung zur Verfügung. Der Suchdialog wird Benutzern nur dann angezeigt, wenn sie die Suche aus einem durchsuchbaren Kontext Ihrer Anwendung aufrufen. Ein durchsuchbarer Kontext ist eine Aktivität, für die Sie durchsuchbare Metadaten in der Manifestdatei deklariert haben. Beispielsweise ist die durchsuchbare Aktivität selbst (im obigen Manifest-Snippet deklariert) ein durchsuchbarer Kontext, da sie Metadaten enthält, die die durchsuchbare Konfiguration definieren. Jede andere Aktivität in Ihrer Anwendung ist standardmäßig kein durchsuchbarer Kontext und zeigt daher den Suchdialog nicht an. Wahrscheinlich möchten Sie jedoch den Suchdialog über Ihre anderen Aktivitäten verfügbar machen (und die durchsuchbare Aktivität starten, wenn der Benutzer eine Suche ausführt). Sie können genau das tun.

Sie können auch steuern, welche Aktivitäten die Suche auf einer detaillierteren Ebene ermöglichen. Um nur eine einzelne Aktivität als durchsuchbaren Kontext anzugeben, platzieren Sie die Datei mit dem Namen "android.app.default_searchable" innerhalb des entsprechenden Elements (und nicht innerhalb des Elements). Sie können gelegentlich auch mehrere durchsuchbare Aktivitäten erstellen und diese in verschiedenen Kontexten Ihrer Anwendung bereitstellen, indem Sie entweder in jedem Element eine andere durchsuchbare Aktivität deklarieren oder eine standardmäßige durchsuchbare Aktivität für die gesamte Anwendung deklarieren und dann überschreiben ein Element innerhalb bestimmter Aktivitäten. (Sie können dies tun, wenn Sie verschiedene Datensätze suchen möchten, die von der gleichen durchsuchbare Aktivität kann nicht behandelt werden, abhängig von der aktuell geöffneten Aktivität.)

Kurz gesagt, werden Sie die Suche Meta- haben müssen Daten für die spezifische Aktivität, von der Sie anrufen onSearchRequested(). Nicht nur, dass die Meta-Daten in diesen anderen Aktivitäten sollten den Namen als default_searchable haben und die Suchaktivität erwähnen, und nicht die XML-durchsuchbare Datei, etwa so:

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

Bemerkt, dass Sie die Suche Meta-Daten an zwei Stellen falsch.

Verwandte Themen