Câu trả lời này hơi muộn nhưng tôi cảm thấy câu trả lời sẽ hữu ích cho người xem trong tương lai. Tình thế tiến thoái lưỡng nan dường như đến từ sự mơ hồ của Android SearchView tutorial. Kịch bản mà chúng bao trùm giả định bạn sẽ hiển thị các kết quả trong cùng một Activity mà SearchView cư trú. Trong một kịch bản như vậy, thẻ Hoạt động trong file AndroidManifest.xml
sẽ giống như thế này:
<activity
android:name=".MainActivity"
android:label="@string/main_activity_label"
android:launchMode="singleTop">
<intent-filter>
<action android:name="android.intent.action.SEARCH"/>
</intent-filter>
<meta-data android:name="android.app.searchable"
android:resource="@xml/searchable" />
</activity>
Sau đó, để xử lý các kết quả trong Hoạt động tương tự, bạn sẽ Ghi đè onNewIntent
phương pháp:
@Override
public void onNewIntent(Intent intent){
setIntent(intent);
if(Intent.ACTION_SEARCH.equals(intent.getAction())) {
String query = intent.getStringExtra(SearchManager.QUERY);
//now you can display the results
}
}
Tuy nhiên, trong trường hợp chúng tôi muốn hiển thị kết quả trong Hoạt động khác, chúng tôi phải đặt Bộ lọc mục tiêu và thẻ meta vào kết quả Hoạt động và giới thiệu thẻ meta mới cho Hoạt động SearchView. Vì vậy, hoạt động của chúng tôi sẽ giống như thế này trong file AndroidManifest.xml
:
<activity
android:name=".MainActivity"
android:label="@string/main_activity_label"
android:launchMode="singleTop">
<!-- meta tag points to the activity which displays the results -->
<meta-data
android:name="android.app.default_searchable"
android:value=".SearchResultsActivity" />
</activity>
<activity
android:name=".SearchResultsActivity"
android:label="@string/results_activity_label"
android:parentActivityName="com.example.MainActivity">
<!-- Parent activity meta-data to support 4.0 and lower -->
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value="com.example.MainActivity" />
<!-- meta tag and intent filter go into results activity -->
<meta-data android:name="android.app.searchable"
android:resource="@xml/searchable" />
<intent-filter>
<action android:name="android.intent.action.SEARCH" />
</intent-filter>
</activity>
Sau đó, trong phương pháp onCreateOptionsMenu MainActivity của chúng tôi, hãy kích hoạt SearchView (giả sử bạn đang thêm SearchView đến ActionBar).Thay vì sử dụng getComponentName()
trong SearchManager của getSearchableInfo() gọi phương thức, chúng ta tạo một đối tượng ComponentName mới sử dụng bối cảnh của MainActivity và lớp SearchResultsActivity:
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_home, menu);
SearchView search = (SearchView) MenuItemCompat.getActionView(menu.findItem(R.id.action_search);
// Associate searchable configuration with the SearchView
SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);
search.setSearchableInfo(searchManager.getSearchableInfo(new ComponentName(this, SearchResultsActivity.class)));
search.setQueryHint(getResources().getString(R.string.search_hint));
return true;
}
Cuối cùng, trong lớp SearchResultsActivity của chúng tôi, trong phương thức onCreate, chúng tôi có thể xử lý kết quả tìm kiếm:
@Override
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
if (Intent.ACTION_SEARCH.equals(intent.getAction())) {
String query = intent.getStringExtra(SearchManager.QUERY);
//use the query to search your data somehow
}
}
Đừng quên để tạo ra các tập tin tài nguyên searchable.xml
và thêm SearchView để bố trí của bạn.
searchable.xml (res/xml/searchable.xml; tạo thư mục xml dưới res nếu cần):
<?xml version="1.0" encoding="utf-8"?>
<searchable xmlns:android="http://schemas.android.com/apk/res/android"
android:label="@string/app_name"
android:hint="@string/search_hint"
android:voiceSearchMode="showVoiceSearchButton|launchRecognizer"/>
Layout (ví dụ về thêm SearchView để ActionBar như một mục trình đơn) :
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
tools:context="com.example.MainActivity">
<group android:checkableBehavior="single">
<item android:id="@+id/action_search" android:title="Search"
android:orderInCategory="1" app:showAsAction="collapseActionView|ifRoom"
app:actionViewClass="android.support.v7.widget.SearchView"/>
</group>
</menu>
Resources:
Vì vậy, tôi cho rằng bạn có dữ liệu để tìm kiếm thông qua phải không? Bạn cũng đang triển khai bất kỳ giao diện nào trong hoạt động của mình? – Eenvincible