2010-04-25 10 views
13

Ich habe die Dokumentation SearchManager verfolgt, habe aber immer noch Probleme, eine der Aktivitäten meiner App durchsuchbar zu machen. Aus meiner Tätigkeit, erscheint das Dialogfeld Suchen, gibt Sie mir eine Abfrage, auf Suchen, meine Tätigkeit wieder öffnet, dann sehe ich dies im Protokoll:Warum ist Intent.getAction() meiner durchsuchbaren Aktivität null?

D/SearchDialog( 584): launching Intent { act=android.intent.action.SEARCH flg=0x10000000 cmp=com.clinkybot.geodroid2/.views.Waypoints (has extras) } 
I/SearchDialog( 584): Starting (as ourselves) #Intent;action=android.intent.action.SEARCH;launchFlags=0x10000000;component=com.clinkybot.geodroid2/.views.Waypoints;S.user_query=sdaf;S.query=sdaf;end 
I/ActivityManager( 584): Starting activity: Intent { act=android.intent.action.SEARCH flg=0x10000000 cmp=com.clinkybot.geodroid2/.views.Waypoints (has extras) } 
D/WAYPOINTS(1018): NI Intent { cmp=com.clinkybot.geodroid2/.views.Waypoints (has extras) } 
D/WAYPOINTS(1018): NI null 
D/WAYPOINTS(1018): NI false 

Es scheint mir, dass alles in Ordnung ist, bis die letzten drei Zeilen nach oben . Die "NI" -Linien sind getIntent().toString(), getIntent().getAction() bzw. getIntent().hasExtra(SearchManager.QUERY).

ActivityManager scheint meine Aktivität mit der richtigen Aktion zu starten. Wenn meine Aktivität startet, enthält sie keine Aktion !? Was mache ich falsch?

Der relevante Teil meines manifest ist:

<activity android:name=".views.Waypoints" android:label="Waypoints" android:launchMode="singleTop"> 
    <intent-filter> 
    <action android:name="android.intent.action.SEARCH" /> 
    <category android:name="android.intent.category.DEFAULT" /> 
    </intent-filter> 
    <meta-data android:name="android.app.searchable" 
    android:resource="@xml/searchable" /> 
    </activity> 

Antwort

15

Das ist zu dauerte viele Stunden meines Lebens. Wenn Sie eine Suche aus der durchsuchbaren singleTop-Aktivität (in meinem Fall Wegpunkte) durchführen, müssen Sie onNewIntent() überschreiben und die Suchanfrage dort ablegen. Was ich nach ein paar Stunden getan habe. Der Haken war, dass getIntent() nicht den Intent zurückgibt, mit dem die Aktivität aufgerufen wurde (Kopf explodiert). Es scheint die ursprüngliche Absicht zurückzugeben, die meine durchsuchbare Aktivität öffnete, bevor ich meine erste Suche ausführte.

Die onNewIntent method empfängt die Suchabsicht. Ich ersetzte getIntent() mit dem Parameter von onNewIntent() und boom, Fortschritt.

Obwohl ich zugeben muss; Das herauszufinden erleichtert die Frustration, dem Sound von nicht entkommen zu können. Tanzen mit den Sternen im Hintergrund.

+0

Ich bin froh, dass ich diese Frage SO gefunden habe, bevor auch mein Kopf explodierte. Dies wird im Leitfaden zu den Anwendungsgrundlagen erwähnt, aber es wäre schön, onNewIntent in [Intent # FLAG_ACTIVITY_SINGLE_TOP] (http://j.mp/gkTnyw) zu erwähnen und nicht nur in [Intent # FLAG_ACTIVITY_CLEAR_TOP] (http://j.mp/fNlEM3). Außerdem erwähnt die Dokumentation zu [activity # getIntent] (http://j.mp/ftcS6p) gar nichts !!! Ugh ... Das sagte, danke. – brack

+1

Also wäre es vielleicht eine gute Übung, immer onNewIntent (getIntent()) von onCreate aufzurufen, nur damit Sie wissen, dass es dem gleichen Code-Pfad folgt. – mclin

+0

Ihr Problem wird hier erklärt http://developer.android.com/guide/topics/search/search-dialog.html#LifeCycle, aber auch nach dem Anwenden dieser, bekomme ich immer noch null ... – max4ever

Verwandte Themen