Set search hint dynamically
android, android-searchmanager
Solution
This feels pretty hacky but worked for me - not truly dynamic but worked for alternating between the two search hints I needed:
- I created a second searchable.xml (as described in the Android search docs), called searchable2.xml, with my second search hint defined.
- I created a dummy activity extended from my original activity and overriding nothing.
In the manifest the dummy activity was associated with the new searchable2.xml:
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<action android:name="android.intent.action.SEARCH" />
</intent-filter>
<meta-data android:name="android.app.searchable"
android:resource="@xml/searchable"/>
</activity>
<activity android:name=".DummyActivity">
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<action android:name="android.intent.action.SEARCH" />
</intent-filter>
<meta-data android:name="android.app.searchable"
android:resource="@xml/searchable2"/>
</activity>
In 'MainActivity' I overrode 'onSearchRequested()' to reference the appropriate searchable activity:
public boolean onSearchRequested()
{
SearchManager searchManager = (SearchManager)getSystemService(Context.SEARCH_SERVICE);
if(searchManager!=null)
{
// start the search with the appropriate searchable activity
// so we get the correct search hint in the search dialog
if(/* your condition here */)
searchManager.startSearch(null, false,new ComponentName(this, MainActivity.class), null, false);
else
searchManager.startSearch(null, false,new ComponentName(this, DummyActivity.class), null, false);
return true;
}
return false;
}
Nasty. But desperate times call for desperate measures...
AFAIK, and from looking at the Android source the class is only used to look up the metadata, but if anybody knows differently then please let me know.
Problem
Does anybody knows how to set android search dialog hint dynamically? T have try to do something like: ``` <?xml version="1.0" encoding="utf-8"?> <searchable xmlns:android="http://schemas.android.com/apk/res/android" android:label="@string/search_label" android:hint="@string/search_hint" android:id="@+id/search_dialog_text"> </searchable> ``` Somewhere: ``` @Override public boolean onSearchRequested() { Bundle appSearchData = new Bundle(); appSearchData.putString("SomeSpecificParam", SomeClass.class.getName()); startSearch("", false, appSearchData, false); EditText text = (EditText )findViewById(R.id.search_dialog_text); text.setHint("Search something else"); return true; } ``` but text is equal null. So looking forward you suggestions. Thanks.