动态设置搜索提示

Bor*_*ris 11 android android-searchmanager

有谁知道如何动态设置android搜索对话框提示?T尝试做类似的事情:

<?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>
Run Code Online (Sandbox Code Playgroud)

某处:

@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;
}
Run Code Online (Sandbox Code Playgroud)

但是文本等于null.

所以期待你的建议.谢谢.

小智 5

这感觉非常hacky但对我有用 - 不是真正的动态,但在我需要的两个搜索提示之间交替工作:

  1. 我创建了第二个searchable.xml(如Android搜索文档中所述),名为searchable2.xml,我的第二个搜索提示已定义.
  2. 我创建了一个从我原来的活动扩展而来的虚拟活动.
  3. 在清单中,虚拟活动与新的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>
    
    Run Code Online (Sandbox Code Playgroud)
  4. 在'MainActivity'中,我覆盖'onSearchRequested()'以引用适当的可搜索活动:

    
    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; }
    Run Code Online (Sandbox Code Playgroud)

讨厌.但绝望的时候需要绝望的措施......

AFAIK,从查看Android源代码来看,该类仅用于查找元数据,但如果有人知道不同,请告诉我.