【问题标题】:I need to start activity using my SearchView widget on my actionbar我需要使用操作栏上的 SearchView 小部件开始活动
【发布时间】:2015-06-02 06:41:06
【问题描述】:

当用户在Search Widget 上按下回车键时,我需要启动我的活动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)

有人知道我做错了什么吗?谢谢。

【问题讨论】:

标签: java android android-layout android-intent android-activity


【解决方案1】:

我的猜测是你选择了错误的导入,你应该导入

import android.support.v7.widget.SearchView;

而不是

import android.widget.SearchView;

【讨论】:

  • 谢谢先生!这帮助我解决了我的java.lang.ClassCastException,但仍然无法打开搜索。我的结果活动。
  • 请分享代码和错误日志..这将帮助我解决问题。
  • 现在我没有收到任何错误。代码的其他哪些部分将有助于解决这个问题?
  • 分享您的完整代码并告诉我您面临的问题......然后只有我可以解决您的代码
  • 将其设置为您的问题的答案...因为首先您遇到了classcast exception,我的答案已解决...所以将其作为答案。
【解决方案2】:

我已经设法在此处使用this 回答解决了这个问题。 以前通过使用

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

我假设当前活动是可搜索的活动。我所要做的就是添加此代码

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

然后将我的可搜索活动设置为SearchResultsActivity

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-12
    • 2015-06-14
    • 1970-01-01
    • 2018-07-15
    相关资源
    最近更新 更多