问题
I tried to using following ways but unable to show recent search history
Create "history" to SearchView on ActionBar
Implementing SearchView in action bar
kindly help how to create and show recent search in serachview searchable xml
回答1:
These are step i am using
Searchable xml file
<?xml version="1.0" encoding="utf-8"?>
<searchable xmlns:android="http://schemas.android.com/apk/res/android"
android:label="@string/app_label"
android:hint="@string/search_hint"
android:searchSuggestAuthority="example.com.cle.MySuggestionProvider"
android:searchSuggestSelection=" ?"
>
</searchable>
Provider
<provider android:name=".MySuggestionProvider"
android:authorities="example.com.cle.MySuggestionProvider" />
Activity in manifiest
<activity
android:name=".BaseActivity"
android:configChanges="orientation|screenSize|keyboardHidden"
android:theme="@style/AppTheme.ActionBar">
<intent-filter>
<action android:name="android.intent.action.SEARCH" />
</intent-filter>
<meta-data
android:name="android.app.searchable"
android:resource="@xml/searchable" />
Activity class
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Intent intent = getIntent();
if (Intent.ACTION_SEARCH.equals(intent.getAction())) {
String query = intent.getStringExtra(SearchManager.QUERY);
SearchRecentSuggestions suggestions = new SearchRecentSuggestions(this,
MySuggestionProvider.AUTHORITY, MySuggestionProvider.MODE);
suggestions.saveRecentQuery(query, null);
}
}
Content provider class
public final static String AUTHORITY ="example.com.cle.MySuggestionProvider";
public final static int MODE = DATABASE_MODE_QUERIES;
public MySuggestionProvider() {
setupSuggestions(AUTHORITY, MODE);
}
回答2:
I got the solution
1.create xml folder searchable
<?xml version="1.0" encoding="utf-8"?>
<searchable xmlns:android="http://schemas.android.com/apk/res/android"
android:label="@string/app_label"
android:hint="@string/search_hint" android:searchSuggestAuthority="your packagename.MySuggestionProvider"
android:searchSuggestSelection=" ?" >
</searchable>
2.create content provider class extends SearchRecentSuggestionsProvider
public class MySuggestionProvider extends SearchRecentSuggestionsProvider {
public final static String AUTHORITY = "your package name.MySuggestionProvider";
public final static int MODE = DATABASE_MODE_QUERIES;
public MySuggestionProvider() {
setupSuggestions(AUTHORITY, MODE);
}
}
- in your activity class
oncreate method
handledearch(getIntent());
4. over ride method
@Override
protected void onNewIntent(Intent intent) {
setIntent(intent);
handledearch(intent);
}
public void handledearch( Intent intent)
{
if (Intent.ACTION_SEARCH.equalsIgnoreCase(intent.getAction())) {
String query = intent.getStringExtra(SearchManager.QUERY);
mtToolbar.setTitle(query);
SearchRecentSuggestions searchRecentSuggestions=new SearchRecentSuggestions(this,
MySuggestionProvider.AUTHORITY,MySuggestionProvider.MODE);
searchRecentSuggestions.saveRecentQuery(query,null);
}
}
in the menu
@Override public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu,menu); SearchManager searchManager=(SearchManager)getSystemService(Context.SEARCH_SERVICE); SearchView searchView; MenuItem menuItem=menu.findItem(R.id.action_search); if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) { searchView=(SearchView)menuItem.getActionView(); } else { searchView=(SearchView) MenuItemCompat.getActionView(menuItem); } searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName())); searchView.setQueryHint(getResources().getString(R.string.search_hint)); return super.onCreateOptionsMenu(menu); }
来源:https://stackoverflow.com/questions/38368873/how-to-show-search-view-recent-search-history