2010-10-19 5 views
17

Ich habe eine Android-App, die ein paar verschiedene Aktivitäten zum Durchsuchen von Artikeln und Bildern aus RSS heruntergeladen hat.Zwei durchsuchbare.xml-Aktivitäten in einer AndroidManifest.xml

Ich würde gerne in der Lage zu bieten, die search button to the Search dialog, unter Verwendung der a searchable.xml Datei anschließen. Ich habe es geschafft, dies mit nur einer Suche zu tun, mit:

<activity android:name=".search.SearchResultsActivity" 
    android:label="@string/search_results_activity_title" > 
    <intent-filter> 
     <action android:name="android.intent.action.SEARCH" /> 
    </intent-filter> 
    <meta-data android:name="android.app.searchable" 
     android:resource="@xml/searchable_articles"/> 
</activity> 

und in der <application />

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

kann ich nun den Suchen-Dialog von jeder Aktivität starten, und es startet die SearchResultsActivity.

Ich möchte jetzt in der Lage sein, nach Bildern zu suchen, wenn der Benutzer ein ImageListActivity ist, mit einem searchable_images.xml, und verwenden Sie den Standard überall sonst.

Ich habe eine SearchResultsImageActivity, die das folgende Metadatenelement enthält und das gleiche Element in ImageListActivity verwendet.

<meta-data android:name="android.app.searchable" 
    android:resource="@xml/searchable_images"/> 

auf die Suchtaste im ImageListActivity drücken, erhalte ich die Standard-Suche von searchable_articles.xml.

Wenn ich die default_searchable zu SearchResultsImageActivity ändern, wird immer die Bildersuche gestartet, und die Artikelsuche wird nie gestartet.

Wenn ich das Metadatenelement default_searchable insgesamt lösche und searchable Metadaten nur ausgewählte Aktivitäten hinzufüge, wird keine Suche gestartet.

Ich bin ziemlich sicher, dass dies möglich sein sollte, aber ich weiß nicht, was ich falsch mache.

+0

Haben Sie das herausgefunden? – Dan

+0

Ich glaube nicht, dass Sie es mit XML tun können, da die Ressource eins zu eins mit einer Absicht ist. Sie können möglicherweise die Ressource in Ihrem Code deaktivieren. – JPM

Antwort

1

Eine Möglichkeit, dies zu tun war, gefälschte Aktivitäten zu erstellen und dann die Aktivitäten zu wechseln, wenn Sie sie brauchen.

<activity android:name="activitySearchMain" /> 
    <activity android:name="activitySearchSub1"> 
    <intent-filter> 
     <action android:name="android.intent.action.SEARCH" /> 
     <category android:name="android.intent.category.DEFAULT" /> 
     <category android:name="android.intent.category.ALTERNATIVE" /> 
     <category android:name="android.intent.category.SELECTED_ALTERNATIVE" /> 
     <data android:scheme="user" /> 
    </intent-filter> 
    </activity> 
    <activity android:name="activitySearchSub2"> 
    <intent-filter> 
     <action android:name="com.sample.twitter.action.SEARCH" /> 
     <category android:name="android.intent.category.DEFAULT" /> 
     <category android:name="android.intent.category.ALTERNATIVE" /> 
     <category android:name="android.intent.category.SELECTED_ALTERNATIVE" /> 
     <data android:scheme="user" /> 
    </intent-filter> 
</activity> 

Erstellen Sie zwei Klassen, die für die Unteraktivitäten benannt sind.

dann Absichten wie folgt erstellen, wenn die Komponente geklickt wird ...

Intent sourceIntent = getIntent(); 
Intent newIntent = new Intent(this, activitySearchSub2.class); 
newIntent.setAction(activitySearchSub2.ACTION2); 
newIntent.setData(sourceIntent.getData()); 
startActivity(newIntent); 
finish(); 

und die Absichten von onClick aufrufen, wenn eine Schaltfläche geklickt wird oder eine andere Komponente klicken:

+0

Ich bin nicht auf diese Aktivität in einem Aktivitätsmuster gestoßen. Mir ist nicht klar, was das macht. – jamesh

+0

Es ist eine Möglichkeit, Aktivitäten zu deaktivieren, wenn Sie auf Schaltflächen klicken, aber Sie können die Hauptaktivität im Hintergrund behalten. Nützlich, wenn Sie in einem Dokument nach einem RSS-Feed suchen. – JPM

0

Wenn Sie die Suche außer Kraft setzen Nur in dieser Aktivität sollte es verhindern, dass der Suchaufruf auf die Anwendungsebene geht. Der Rückgabewert steuert, ob der Aufruf weitergegeben wird.

@Override 
public boolean onSearchRequested() { 
    onPromptSearch(); 
    return false; // don't go ahead and show the search box 
} 
4

In Ihrem Manifest-Datei über die ImageListActivity Aktivitäts-Tag

<activity 
    android:name=".ImageListActivity" 
    ... 

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

Also, wenn Sie ein neueres Suche in ImageListActivity auslösen wird es die SearchResultsImageActivity und Standard eine für andere aufruft.

Angenommen SearchResultsImageActivity ist searchable.

+0

Dies funktioniert. –