2010-07-05 8 views
8

Je veux développer une application à onglets sur Android. En même temps, je souhaite que la fonctionnalité de recherche soit présente sur certains onglets. Pour cette raison, j'ai déclaré certaines activités dans le fichier manifeste et les ai ajoutées à TabHost. Mais le problème est que lorsque je fais une recherche, il appelle la méthode onCreate() de l'activité en cours qui réside dans le contenu de l'onglet. Ce que je veux, c'est que searchManager appelle la méthode onNewIntent() pour qu'une nouvelle activité ne soit pas créée et que je puisse gérer la recherche dans l'activité existante. Je poste mon fichier source manifeste et TabActivity pour être plus clair:Search crée de nouvelles activités dans TabActivity

Une partie du fichier manifeste:

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

Activité Tab onCreate Méthode:

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

Je pense que ces deux bogues sont liés: http://code.google.com/p/android/issues/detail?id=17137 http://code.google.com/p/android/issues/detail? id = 4155 – Agos

+0

avez-vous résolu cela? –

Répondre

1

Je ne sais pas si vous avez trouvé un répondre à cela, mais j'avais un problème connexe dans le fait que j'essayais de faire apparaître l'interface de recherche à partir d'un menu de tabactivité (la recherche devrait apparaître quel que soit l'onglet actif), et elle ne s'affichait pas en haut Après un peu de recherche et de lecture de l''Search' article attentivement, j'ai remarqué le paragraphe suivant:

La boîte de dialogue de recherche n'est pas, par défaut, disponible à partir de toutes les activités de votre application. Au contraire, la boîte de dialogue de recherche est présentée aux utilisateurs uniquement lorsqu'ils invoquent la recherche à partir d'un contexte interrogeable de votre application. Un contexte interrogeable est une activité pour laquelle vous avez déclaré des métadonnées consultables dans le fichier manifeste. Par exemple, l'activité interrogeable elle-même (déclarée dans l'extrait de manifeste ci-dessus) est un contexte interrogeable car elle inclut des métadonnées qui définissent la configuration interrogeable. Toute autre activité dans votre application n'est pas un contexte interrogeable, par défaut, et ne révèle donc pas la boîte de dialogue de recherche. Cependant, vous voulez probablement que la boîte de dialogue de recherche soit disponible pour vos autres activités (et pour lancer l'activité interrogeable lorsque l'utilisateur exécute une recherche). Vous pouvez faire exactement cela.

Vous pouvez également contrôler les activités qui fournissent une recherche à un niveau plus granulaire. Pour spécifier uniquement une activité individuelle en tant que contexte de recherche, placez le avec le nom "android.app.default_searchable" dans l'élément correspondant (plutôt qu'à l'intérieur de l'élément). Bien que rare, vous pouvez également créer plusieurs activités interrogeables et les fournir dans différents contextes de votre application, soit en déclarant une activité de recherche différente dans chaque élément, soit en déclarant une activité interrogeable par défaut pour l'application entière, puis en la remplaçant par un élément à l'intérieur de certaines activités. (Vous pouvez le faire si vous voulez rechercher différents ensembles de données qui ne peuvent pas être traitées par la même activité consultable, en fonction de l'activité actuellement ouvert.)

En bref, vous devez avoir la méta- de recherche données pour l'activité spécifique à partir de laquelle vous appelez onSearchRequested(). Non seulement cela, les méta-données dans ces activités devraient avoir le nom default_searchable et mentionner l'activité de recherche, et non le fichier interrogeable xml, comme ceci:

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

Remarqué que vous avez la recherche de méta-données mal à deux endroits.

Questions connexes