簡體   English   中英

我需要使用操作欄上的SearchView小部件來開始活動

[英]I need to start activity using my SearchView widget on my actionbar

當用戶在Search Widget上按Enter時,我需要啟動我的活動SearchResultsActivity 每當我單擊如下所示的menu_search ,我就已經間接調用了onSearchRequested函數。

<item
    android:id="@+id/menu_search"
    android:title="@string/menu_search"
    appcompat:actionViewClass="android.support.v7.widget.SearchView"
    appcompat:showAsAction="always" />

每當我輸入查詢然后輸入/搜索都不會發生。 我設置了清單文件,如下所示:

<!-- Main activity -->
    <activity
        android:name=".ui.activity.MainActivity"
        android:label="@string/app_name" >

        <meta-data
            android:name="android.default.searchable"
            android:value=".SearchResultsActivity"/>
    </activity>
    <!-- Search Results Activity -->
    <activity
        android:name=".ui.activity.SearchResultsActivity"
        android:label="@string/search_results_activity_title">
        <intent-filter>
            <action android:name="android.intent.action.SEARCH" />
        </intent-filter>

        <meta-data
            android:name="android.app.searchable"
            android:resource="@xml/searchable" />
    </activity>

主要活動是我執行搜索的地方,SearchResultsActivity接收我的搜索查詢。 目前,我對此並不擔心。 我只想通過搜索打開我的SearchResultsActivity。 我嘗試了一些技巧,例如覆蓋onOptionsItemSelected

case R.id.menu_search:
            Intent searchIntent = new Intent(MainActivity.this, SearchResultsActivity.class);;
            startActivity(searchIntent);
            break;

這仍然沒有調用我的搜索活動。 我還將可搜索配置與onCreateOptionsMenu上的SearchView關聯。

SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);
    SearchView searchView = (SearchView) menu.findItem(R.id.menu_search).getActionView();

    searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName()));

    searchView.setIconifiedByDefault(false);

添加此代碼將返回java.lang.ClassCastException

java.lang.ClassCastException: android.support.v7.widget.SearchView cannot be cast to android.widget.SearchView
        at com.nauv.jambomall.ui.activity.MainActivity.onCreateOptionsMenu(MainActivity.java:205)
        at android.app.Activity.onCreatePanelMenu(Activity.java:2578)
        at android.support.v4.app.FragmentActivity.onCreatePanelMenu(FragmentActivity.java:277)
        at android.support.v7.internal.view.WindowCallbackWrapper.onCreatePanelMenu(WindowCallbackWrapper.java:84)
        at android.support.v7.app.AppCompatDelegateImplBase$AppCompatWindowCallback.onCreatePanelMenu(AppCompatDelegateImplBase.java:251)
        at android.support.v7.app.AppCompatDelegateImplV7.preparePanel(AppCompatDelegateImplV7.java:1089)
        at android.support.v7.app.AppCompatDelegateImplV7.doInvalidatePanelMenu(AppCompatDelegateImplV7.java:1374)
        at android.support.v7.app.AppCompatDelegateImplV7.access$100(AppCompatDelegateImplV7.java:89)
        at android.support.v7.app.AppCompatDelegateImplV7$1.run(AppCompatDelegateImplV7.java:126)
        at android.os.Handler.handleCallback(Handler.java:730)
        at android.os.Handler.dispatchMessage(Handler.java:92)
        at android.os.Looper.loop(Looper.java:137)
        at android.app.ActivityThread.main(ActivityThread.java:5414)
        at java.lang.reflect.Method.invokeNative(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:525)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1187)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1003)
        at dalvik.system.NativeStart.main(Native Method)

有人知道我在做什么錯嗎? 謝謝。

我的猜測是您選擇了錯誤的導入,應該導入

import android.support.v7.widget.SearchView;

代替

import android.widget.SearchView;

我設法在這里使用答案解決問題。 以前通過使用

searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName()));

我假設當前活動是可搜索活動。 我要做的就是添加這段代碼

ComponentName sa = new ComponentName(this, SearchResultsActivity.class);

然后將我的可搜索活動設置為SearchResultsActivity

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM