Mein Anwendungsfall ist der folgende: In Aktivität A habe ich eine Aktionsleiste mit einer zusammenklappbaren SearchView. Wenn der Benutzer ihre Anfrage gibt und den 'Suchen' Knopf drückt, möchte ich Aktivität B mit den Ergebnissen zeigen. Ich bin nicht zu tun, hier ist mein Code:SearchView in einer Aktivität, Ergebnisse in einer anderen
searchable.xml:
<?xml version="1.0" encoding="utf-8"?>
<searchable xmlns:android="http://schemas.android.com/apk/res/android"
android:hint="@string/action_search_hint"
android:label="@string/app_name"/>
Aktivität A:
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu, menu);
SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);
SearchView searchView = (SearchView) menu.findItem(R.id.action_search).getActionView();
searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName()));
return true;
}
AndroidManifest für Aktivität A und B:
<activity
android:name=".ActivityA">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
<activity android:name=".ActivityB">
<intent-filter>
<action android:name="android.intent.action.SEARCH"/>
</intent-filter>
<meta-data
android:name="android.app.searchable"
android:resource="@xml/searchable"/>
</activity>
Aber egal, was ich versuche, getSearchableInfo in A gibt immer null zurück.
Ich habe das Gefühl, ich verstehe etwas nicht. Die einzige Möglichkeit, getSearchableInfo() return not null zu erzeugen, besteht darin, den Filter SEARCH Intent und die durchsuchbaren Metadaten in die Aktivität A im Manifest zu schreiben. Aber dann, wenn ich den "Suchen" -Button drücke, wird eine weitere Instanz von Aktivität A erneut über die aktuelle gestartet, was definitiv nicht das ist, was ich möchte. Ich denke, ich könnte singleTop zu A hinzufügen und die Aktion SEARCH in onNewIntent behandeln und B starten, aber ich möchte generell nicht, dass A singleTop ist, ich möchte die Standardeinstellung. Oder tue ich?
ich versuchte, dies zu A im Manifest Zugabe (wie in einigen anderen Threads vorgeschlagen):
<meta-data
android:name="android.app.default_searchable"
android:value=".ActivityB" >
</meta-data>
Was mache ich falsch?
EDIT: Ich ersetzte die 'GetComponentName()' Linie in A mit dem folgenden:
searchView.setSearchableInfo(searchManager.getSearchableInfo(new ComponentName(this, ActivityB.class)));
und es scheint so, wie ich will zu arbeiten! Mache ich hier etwas falsch oder ist das der richtige Weg? Ich bin ein bisschen unsicher, weil es nirgends erwähnt wird!
Das Dokument sagt 'getSearchableInfo (componentName)' nimmt ein Argument, das 'die Aktivität ist, nach der durchsuchbare Informationen erhalten'. In Ihrem Fall benötigen Sie ActivityB, daher ist das Konstruieren eines 'ComponentName', der auf ActivityB verweist, der richtige Weg. – hidro
@hidro - Ich werde Ihre Antwort akzeptieren, wenn Sie eine schreiben. – wujek
Tausend Dank für diese Frage. Nach vier Stunden verschwendeter Zeit gerettet. – X09