【问题标题】:Android SearchView widget wont start searchableActivityAndroid SearchView 小部件不会启动可搜索的活动
【发布时间】:2018-02-04 23:17:34
【问题描述】:

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

这是我的 Android 清单(由 Berhan zikarge 的回答编辑):

        <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) {
        // Inflate the layout for this fragment
        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);
        }

    }
    //Here no log is displayed in logcat, and no Toast is shown on the app
    public void doMySearch(String query) {
        Toast.makeText(getBaseContext(), query+"wsh", Toast.LENGTH_SHORT).show();
        Log.e("The query : ",query);

    }
}

我在这个问题上苦苦挣扎了两个多小时,如果有人有解决方案,我将不胜感激。

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

@Override
public boolean onQueryTextSubmit(String query) {

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

    return false;
}

【问题讨论】:

    标签: android android-fragments android-activity searchview


    【解决方案1】:

    我认为您需要将元数据标签放在发送搜索数据的活动上,而不是接收数据的活动上。 ClientActivity 应该有元数据标签:

    <!-- this activity enables the search dialog to initiate searches
         in the SearchableActivity -->
    <activity android:name=".OtherActivity" ... >
        <!-- enable the search dialog to send searches to SearchableActivity -->
        <meta-data android:name="android.app.default_searchable"
                   android:value=".SearchableActivity" />
    </activity>
    ...
    

    https://developer.android.com/guide/topics/search/search-dialog.html

    【讨论】:

    • 我做了,但是“.OtherAcitivty”被称为“.ClientActivity”。
    • 您的 XML 显示 ClientActivity 的活动标记之外的标记。
    • 对不起,我在复制/粘贴创建该帖子时出错。我编辑了那个。
    • 您是否有任何日志语句可以查看您在搜索过程中的进展情况?
    • 没有特别的日志,好像SearchActivity永远启动不了。
    【解决方案2】:

    问题在于客户端活动的元数据在活动标签之外。将以下代码复制并粘贴到清单中

     <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>
    

    【讨论】:

    • 很抱歉,我在创建该帖子时复制/粘贴错误。我刚刚复制/粘贴了您发布的 XML,但仍然无法正常工作。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-05-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-12
    • 1970-01-01
    相关资源
    最近更新 更多