Tôi đang cố gắng tạo ứng dụng Android đầu tiên của mình và đang trong quá trình thêm vào chức năng TÌM KIẾM. Tôi đã theo dõi tài liệu dành cho nhà phát triển Android để thêm cả hộp thoại và tiện ích Tìm kiếm. Thật không may, bất cứ khi nào tôi thực hiện tìm kiếm, "onCreate" AND "onNewIntent" của Activity Activity được gọi. Đó là, bằng cách gõ một cái gì đó trong hộp Action Bar Search và nhấn ENTER, tìm kiếm được gọi là TWICE. Tôi bị kẹt. Một số lá cờ toàn cầu được cho là được trả lại từ hoạt động có thể tìm kiếm thông báo cho ứng dụng rằng tìm kiếm đã được hoàn thành chưa? Có phải cả hộp thoại Tìm kiếm và tiện ích con đang được gọi?Hoạt động có thể tìm kiếm được gọi hai lần
Tôi đã tìm kiếm các bài đăng trước trên trang web này và trên web mà không có kết quả. Cảm ơn bạn đã giúp đỡ.
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"/>
Xin chào, bạn đã giải quyết vấn đề này chưa? Tôi đang đối mặt với cùng một điều – vinnybad
Đối mặt với cùng một vấn đề. Bạn đã tìm thấy một giải pháp? –
guys, bạn có thể cho tôi biết về thiết bị bạn tìm thấy vấn đề này? Tôi chỉ có thể tái tạo nó trên trình giả lập Genymotion nhưng không phải trên bất kỳ thiết bị nào khác (S3, S4, Galaxy Nexus chạy 4.0.4, Nexus 7 chạy 4.3) –