搜索小部件在发布apk中不起作用

时间:2015-01-15 16:45:13

标签: android search widget android-appcompat searchview

我有一个奇怪的问题(至少对我而言)。 我的应用程序适用于调试apk。但是当我创建发布apk时,它会在searchwidget中显示错误。 我正在使用支持库' com.android.support:appcompat-v7:21.0.3'

这是我的代码

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // TODO Auto-generated method stub

    MenuInflater mi = getMenuInflater();
    mi.inflate(R.menu.searchmenu, menu);

    SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);
    final MenuItem searchItem = menu.findItem(R.id.searchwidget);
    final SearchView searchView = (SearchView) MenuItemCompat
            .getActionView(searchItem);
    if(null!=searchManager ) {   
     searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName()));
    }
    searchView.setIconifiedByDefault(false);

    SearchView.OnQueryTextListener textChangeListener = new SearchView.OnQueryTextListener() {
        @Override
        public boolean onQueryTextChange(String newText) {
            // this is your adapter that will be filtered
            Programs.this.adapter.getFilter().filter(newText);
            return true;
        }

        @Override
        public boolean onQueryTextSubmit(String query) {
            // this is your adapter that will be filtered
            Programs.this.adapter.getFilter().filter(query);
            return true;
        }
    };
    searchView.setOnQueryTextListener(textChangeListener);

    return super.onCreateOptionsMenu(menu);
}

我的菜单代码

<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">

<item 
    android:title="@string/search"
    android:id="@+id/searchwidget"
    app:showAsAction="always|collapseActionView"
    android:icon="@drawable/ic_action_search"
    app:actionViewClass="android.support.v7.widget.SearchView"></item> 


</menu>

首先我认为这是一个问题,因此我使用了这个

-keepclassmembers class android.support.v7.widget.SearchView{
}

但仍然是同样的问题。

任何人都可以解释为什么会这样吗?

2 个答案:

答案 0 :(得分:26)

你必须添加

-keep class android.support.v7.widget.SearchView { *; }

到proguard-rules.pro文件。

不知何故,它与proguard混淆有关,可能是SearchView中的一个错误。 (某些版本受影响,有些版本没有受影响)

答案 1 :(得分:-4)

禁用progaurd或将其作为“false”从build.gradle

它会增加尺寸,但会完成工作。

它对我有用