【问题标题】:ClassCastException on SearchView using ActionBarSherlock使用 ActionBarSherlock 的 SearchView 上的 ClassCastException
【发布时间】:2013-12-09 17:58:42
【问题描述】:

我的应用上有一个搜索视图。我可以在搜索框中输入,但是,如果我按搜索,应用程序就会崩溃。它说

11-25 00:57:09.446: E/AndroidRuntime(1914): java.lang.ClassCastException: com.actionbarsherlock.widget.SearchView cannot be cast to android.widget.SearchView

但是,我在菜单文件中声明的内容是正确的。

<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@+id/search"
      android:title="Quezon City Guide"
      android:icon="@drawable/ic_action_search"
      android:showAsAction="collapseActionView|ifRoom"
     android:actionViewClass="com.actionbarsherlock.widget.SearchView" />
</menu>

这是我调用它的方法

public boolean onCreateOptionsMenu(Menu menu) {
    MenuInflater inflater = getSupportMenuInflater();
    inflater.inflate(R.menu.options_menu, (Menu) menu);


    SearchManager searchManager =
            (SearchManager) getSystemService(Context.SEARCH_SERVICE);
     SearchView searchView =
             (SearchView) menu.findItem(R.id.search).getActionView();
     searchView.setSearchableInfo(
             searchManager.getSearchableInfo(getComponentName()));



    return super.onCreateOptionsMenu(menu);

}


public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        case R.id.search:

            return true;
        default:
            return super.onOptionsItemSelected(item);
    }
}

我不知道我做错了什么。

这是我的导入

 import android.app.SearchManager;
 import android.content.Context;
 import android.content.Intent;
 import android.os.Build;
 import android.os.Bundle;
 import com.actionbarsherlock.view.Menu;
 import com.actionbarsherlock.view.MenuInflater;
 import com.actionbarsherlock.view.MenuItem;
 import android.view.View;
 import android.view.View.OnClickListener;
 import android.widget.Button;
 import android.widget.ImageButton;
 import android.widget.Toast;
 import com.actionbarsherlock.widget.SearchView;
 import com.actionbarsherlock.app.SherlockActivity;

有人可以帮忙吗?谢谢!

【问题讨论】:

  • 在运行项目之前尝试清理。这总是对我有帮助
  • 错误本身显示出了什么错误...
  • @Miguel,你在onOptionsItemSelected() 有实现吗?
  • 你清理过项目吗?然后运行程序?
  • 是的。还是不行。

标签: android actionbarsherlock classcastexception searchview


【解决方案1】:

您很可能在 import 语句中引用了默认的 Android Widget 而不是 Sherlock Search Widget:

SearchView searchView =
        (SearchView) menu.findItem(R.id.search).getActionView();

【讨论】:

    【解决方案2】:

    尝试在 menu.xml 文件中使用 android.widget.SearchView

    【讨论】:

      【解决方案3】:
      private SearchView mSearchView = null;
      

      进入 OnCreateOptionMenu 使用如下代码

      @Override
        public boolean onCreateOptionsMenu(Menu menu) {
          MenuInflater inflater = getSupportMenuInflater();
          inflater.inflate(R.menu.mainmenu, menu);        
          MenuItem searchItem = menu.findItem(R.id.search);
          mSearchView = (SearchView) searchItem.getActionView();
         setupSearchView(searchItem);
          return true;
        } 
      
      
        private void setupSearchView(MenuItem searchItem) {
      
                  SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);
                  if (searchManager != null) {
                      mSearchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName()));
                     // mSearchView.setSearchableInfo(info);
                  }    
                  mSearchView.setOnQueryTextListener(this);
      
              } 
      

      【讨论】:

        【解决方案4】:

        似乎您正在尝试将Android actionbarSearchView 映射到Action Bar SherlockSearchView。那是你的错误!

        【讨论】:

        • 什么意思?很抱歉还是个新手。
        • 这有点难以解释,但我会尝试。您的错误清楚地说明了您的搜索小部件包名称。您似乎正在尝试将操作栏 sherlock 的搜索小部件转换为 android 中的本机搜索小部件。确保搜索小部件的类型相同,那么您将不会收到错误。
        猜你喜欢
        • 1970-01-01
        • 2013-10-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-05-31
        相关资源
        最近更新 更多