Sto provando a creare la mia prima app per Android e in procinto di aggiungervi la funzionalità di ricerca. Ho seguito la documentazione dello sviluppatore Android per aggiungere sia la finestra di dialogo Cerca che il widget. Sfortunatamente, ogni volta che eseguo una ricerca, vengono chiamati "onCreate" E "onNewIntent" dell'attività di ricerca. Cioè, digitando qualcosa nella casella Cerca nella barra delle azioni e premendo INVIO, la ricerca viene chiamata DUE VOLTE. Sono bloccato. Si suppone che venga restituita una bandiera globale dall'attività ricercabile che notifica all'app che la ricerca è stata completata? SONO ENTRAMBI i nomi della finestra di dialogo Cerca e del widget?L'attività ricercabile viene chiamata due volte
Ho cercato i post precedenti su questo sito e sul Web senza alcun risultato. Grazie per tutto l'aiuto.
AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.shop"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="14"
android:targetSdkVersion="17" />
<uses-permission android:name="android.permission.INTERNET" />
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<service android:name="com.shop.RestIntentService" />
<activity
android:name="com.shop.MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name="com.shop.CatalogActivity"
android:label="@string/app_name" >
</activity>
<activity
android:name="com.shop.SearchableActivity"
android:launchMode="singleTop" >
<intent-filter>
<action android:name="android.intent.action.SEARCH" />
</intent-filter>
<!--
<intent-filter>
<action android:name="android.intent.action.VIEW" />
</intent-filter>
-->
<meta-data
android:name="android.app.searchable"
android:resource="@xml/searchable" />
</activity>
<meta-data
android:name="android.app.default_searchable"
android:value="com.shop.SearchableActivity" />
</application>
</manifest>
SearchableActivity.java
public class SearchableActivity extends ListActivity implements Receiver {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
System.out.println("onCreate");
handleIntent(getIntent());
}
@Override
public void onNewIntent(Intent intent) {
super.onNewIntent(intent);
System.out.println("onNewIntent");
setIntent(intent);
handleIntent(intent);
}
private void handleIntent(Intent intent) {
if (Intent.ACTION_SEARCH.equals(intent.getAction())) {
String query = intent.getStringExtra(SearchManager.QUERY);
doSearch(query);
}
}
private void doSearch(String queryStr) {
System.out.println("searching..." + queryStr);
}
CatalogActivity.java
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.sample, menu);
SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);
SearchView searchView = (SearchView) menu.findItem(R.id.menu_search).getActionView();
searchView.setSearchableInfo(searchManager
.getSearchableInfo(getComponentName()));
//return super.onCreateOptionsMenu(menu);
return true;
}
sample.xml
<item
android:id="@+id/menu_search"
android:actionViewClass="android.widget.SearchView"
android:icon="@android:drawable/ic_menu_search"
android:showAsAction="ifRoom|collapseActionView"
android:title="@string/menu_search"/>
Ciao, hai risolto questo problema? Sto affrontando la stessa cosa – vinnybad
di fronte allo stesso problema. Hai trovato una soluzione? –
ragazzi, puoi dirmi su quale dispositivo hai trovato questo problema? Posso riprodurlo solo con l'emulatore Genymotion ma non su qualsiasi altro dispositivo (S3, S4, Galaxy Nexus con 4.0.4, Nexus 7 con 4.3) –