Ich versuche, meine erste Android-App zu erstellen und dabei SEARCH-Funktionalität hinzuzufügen. Ich habe die Android-Entwicklerdokumentation verfolgt, um sowohl den Suchdialog als auch das Widget hinzuzufügen. Wenn ich eine Suche durchführe, werden leider die "onCreate" UND die "onNewIntent" der Suchaktivität aufgerufen. Das heißt, indem Sie etwas in das Suchfeld der Aktionsleiste eingeben und ENTER drücken, wird die Suche TWICE genannt. Ich stecke fest. Soll eine globale Flagge von der Durchsuchbaren Aktivität zurückgegeben werden, die der App mitteilt, dass die Suche abgeschlossen wurde? Sind sowohl der Suchdialog als auch das Widget aufgerufen?Durchsuchbare Aktivität, die zweimal aufgerufen wird
Ich habe vorherige Beiträge auf dieser Website und im Internet vergeblich gesucht. Danke für jede Hilfe.
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"/>
Hallo, haben Sie dieses Problem gelöst? Ich stehe vor der gleichen Sache – vinnybad
Mit dem gleichen Problem. Hast du eine Lösung gefunden? –
Leute, können Sie mir sagen, auf welchem Gerät Sie dieses Problem gefunden haben? Ich kann es nur auf Genymotion-Emulator aber nicht auf jedem anderen Gerät reproduzieren (S3, S4, Galaxy Nexus mit 4.0.4, Nexus 7 mit 4.3) –