Frage

Ich habe eine Tätigkeit suchen Handling ( ACTIVITY_1 ), die perfekt funktioniert, wenn ich die Suche verwenden (über SEARCH-Taste am Telefon) in / aus dieser Tätigkeit.

Doch wenn ich von einer anderen Aktivität suchen ( ACTIVITY_2..x ) durch onNewIntent Umsetzung und leiten den Query-String in meine Search_Activity.class ( ACTIVITY_1 )

@Override
protected void onNewIntent(Intent intent) {
    Log.i(TAG, "onNewIntent()");

    if (Intent.ACTION_SEARCH.equals(intent.getAction())) {
        Log.i(TAG, "===== Intent: ACTION_SEARCH =====");
        Intent myIntent = new Intent(getBaseContext(), Search_Activity.class);
        myIntent.setAction(Intent.ACTION_SEARCH);
        myIntent.putExtra(SearchManager.QUERY, intent.getStringExtra(SearchManager.QUERY));
        startActivity(myIntent);
    }

}

es Pausen immer ACTIVITY_2 und dann geht an onCreate () von ACTIVITY_2 .

  • Warum muss es neu erstellen mein ACTIVITY_2 , wenn es schon da ist und geht nicht zu onNewIntent direkt?
  • Gibt es eine andere Art und Weise ich mich Anfragen direkt an suchen ACTIVITY_1 ? Zum Beispiel über eine Einstellung im Manifest.xml
  • Ist es möglich, in der Regel darauf, alle Suchanfragen automatisch auf ACTIVITY_1 , ohne auch nur onNewIntent in alle anderen Aktivitäten zu implementieren?

Zur Zeit habe ich eine <intent-filter> in jeder einzelnen Aktivität setzt auf „Activate“ meine Gewohnheit dort suchen und die Abfrage weiterleiten dann an die Aktivität, die Griffe über die onNewIntent zu suchen (siehe Abbildung oben).

<activity android:name=".Another_Activity"
    android:theme="@style/MyTheme">
    <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>
War es hilfreich?

Lösung

Ich bin nicht sicher, verstehe ich die Kette von Ereignissen Ihrer beschreiben, aber hier ist, wie Sie benötigen, um Ihre Anwendung in dem Fall zu konfigurieren waren ACTIVITY_1 die Suche Aktivität ist, dass Sie immer von allen anderen Aktivitäten gestartet werden sollen, wenn der Benutzer das presst Button 'suchen'.

Unter der Annahme, dass die Suchtaste funktioniert perfekt auf Activity1, brauchen Sie nur ein wenig Klebstoff Meta-Daten zu Ihrer Anwendung hinzuzufügen es zu sagen, dass alle Ihre anderen Aktivitäten ACTIVITY_1 für die Suche verwendet werden soll, wie weiter unten im Manifest Schnipsel gezeigt:

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

   <!-- All your activities, service, etc. -->

</application>

Mit diesem, sollten Sie die Intent-Filter von allen aber ACTIVITY_1 entfernen können, und Sie werden nicht die onNewIntent Handler in einer Ihrer anderen Aktivitäten verwenden müssen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top