【问题标题】:Trouble making SearchView widget working使 SearchView 小部件无法正常工作
【发布时间】:2018-02-05 17:43:54
【问题描述】:

我实际上是在尝试从片段中执行搜索。我只想显示用户尝试使用膨胀到片段的 SearchView 小部件搜索的文本(带有 Toast)。根据 Android 文档,当用户使用 SearchView 小部件执行搜索时,应用程序应该启动 SearchableActivity。问题是我无法让它启动 SearchableActivity。

这是我的 Android 清单:

        <activity
        android:name=".ClientActivity"
        android:screenOrientation="nosensor"
        android:label="@string/title_activity_client"
        android:windowSoftInputMode="stateAlwaysHidden|adjustPan">

        <meta-data android:name="android.app.default_searchable"
            android:value=".SearchableActivity" />
        </activity>
        <activity android:name=".SearchableActivity" >
            <intent-filter>
                <action android:name="android.intent.action.SEARCH" />
            </intent-filter>
            <meta-data android:name="android.app.searchable"
                android:resource="@xml/searchable"/>
        </activity>

这是 ClientActivity 中调用的片段:

@Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {

        View view = inflater.inflate(R.layout.fragment_organisation_search, container, false);
        SearchView searchView = (SearchView) view.findViewById(R.id.search_view_id);
        searchView.setIconified(false);
        searchView.setIconifiedByDefault(false);
        searchView.requestFocus();
        return view;
    }

它膨胀的布局:

<ScrollView
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_height="match_parent"
    android:layout_width="match_parent">

    <android.support.v7.widget.SearchView
        android:id="@+id/search_view_id"    
        android:layout_height="wrap_content"
        android:layout_width="match_parent"
        android:label="@string/app_name"
        android:hint="@string/search_hint"
        android:background="@drawable/block">         

    </android.support.v7.widget.SearchView> 
</ScrollView>

SearchableActivity.java:

public class SearchableActivity extends Activity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        Intent intent = getIntent();
        if (Intent.ACTION_SEARCH.equals(intent.getAction())) {
            String query = intent.getStringExtra(SearchManager.QUERY);
            doMySearch(query);
        }

    }       
    public void doMySearch(String query) {
        Toast.makeText(getBaseContext(), query+"wsh", Toast.LENGTH_SHORT).show();
        Log.e("The query : ",query);

    }
}

这里是 searchable.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" >
</searchable>

我试图让 searchview 小部件工作已经有好几天了。如果您有任何想法,我将不胜感激。

编辑 我使它工作将此代码添加到我的片段:

@Override
public boolean onQueryTextSubmit(String query) {

    return true;
}
@Override
public boolean onQueryTextChange(String newText) {

    return false;
}

【问题讨论】:

  • 创建可搜索的配置 - 参考:developer.android.com/guide/topics/search/…
  • 我做了,正如你在我的 AndroidManifest 中看到的那样:&lt;meta-data android:name="android.app.searchable" android:resource="@xml/searchable"/&gt;,我为可搜索的配置创建了一个 xml 文件
  • 使用搜索小部件可以将搜索框放在活动中的任何位置。与其把它放在你的活动布局中,你通常应该使用 SearchView 作为应用栏中的操作视图。
  • 我确实需要将搜索框放在特定位置而不是应用栏。反正我的问题已经解决了,谢谢!

标签: android android-fragments android-activity searchview


【解决方案1】:

添加 searchable.xml

这个文件传统上被命名为 searchable.xml 并且必须保存在 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" >
</searchable>

【讨论】:

  • 我已经这样做了,检查我的 android 清单:&lt;meta-data android:name="android.app.searchable" android:resource="@xml/searchable"/&gt;。刚刚编辑了我的帖子,向您展示了我的 searchable.xml 文件的内容。
猜你喜欢
  • 1970-01-01
  • 2020-12-18
  • 2014-10-20
  • 1970-01-01
  • 2022-11-11
  • 2022-11-04
  • 2021-04-04
  • 1970-01-01
  • 2022-06-22
相关资源
最近更新 更多