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
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
I got the solution
create an xml file called searchable.xml
(in res/xml)
<?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>
create a content provider class that 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's class onCreate
method
handleSearch(getIntent());
override this method:
@Override
protected void onNewIntent(Intent intent) {
setIntent(intent);
handleSearch(intent);
}
public void handleSearch( 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);
}
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);
}