Il mio caso d'uso è il seguente: nell'attività A, ho una barra delle azioni con un SearchView comprimibile. Quando l'utente fa la sua domanda e preme il pulsante 'cerca', mi piacerebbe mostrare l'attività B con i risultati. Sto riuscendo a farlo, qui è il mio codice:SearchView in una attività, ne restituisce un'altra
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"/>
Attività 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 per attività A e 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>
Howerver, qualunque cosa provi, getSearchableInfo in A restituisce sempre null.
Ho la sensazione che non capisco qualcosa. L'unico modo per rendere getSearchableInfo() return non nullo è quando inserisco il search filter e i meta-data ricercabili nell'attività A nel manifest. Ma poi, quando premo il pulsante 'cerca', un'altra istanza dell'attività A viene riavviata in cima a quella corrente, che sicuramente non è ciò che voglio. Suppongo di poter aggiungere singleTop ad A e gestire l'azione SEARCH in onNewIntent e avviare B, ma generalmente non voglio che A sia singleTop, voglio il default. O io?
Ho provato ad aggiungere ad un nel manifesto (come suggerito in alcuni altri thread):
<meta-data
android:name="android.app.default_searchable"
android:value=".ActivityB" >
</meta-data>
Che cosa sto facendo di sbagliato?
EDIT: ho sostituito il 'getComponentName) (' la linea in A con il seguente:
searchView.setSearchableInfo(searchManager.getSearchableInfo(new ComponentName(this, ActivityB.class)));
e sembra funzionare nel modo desiderato! Sto facendo qualcosa di sbagliato qui, o è questo il modo corretto? Sono un po 'incerto perché non è menzionato da nessuna parte!
Il documento dice 'getSearchableInfo (componentName)' accetta un argomento, che è 'l'attività per ottenere informazioni ricercabili per'. Nel tuo caso hai bisogno di ActivityB, quindi costruire un 'ComponentName' che punti a ActivityB è il modo corretto. – hidro
@hidro - Accetterò la tua risposta se ne scrivi una. – wujek
Grazie mille per aver fatto questa domanda. Salvato dopo quattro ore di tempo perso. – X09