搜索小部件在发布 apk 中不起作用
search widget is not working in release apk
我遇到了一个奇怪的问题(至少对我而言)。
我的应用程序适用于调试 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>
起初我以为是proguard问题所以我用了这个
-keepclassmembers class android.support.v7.widget.SearchView{
}
但还是一样的问题。
谁能解释为什么会这样?
禁用 progaurd 或将其设为 "false" 来自 build.gradle
它会增加大小,但会完成工作。
对我有用
你必须添加
-keep class android.support.v7.widget.SearchView { *; }
proguard-rules.pro 文件。
不知何故与proguard混淆有关,可能是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>
起初我以为是proguard问题所以我用了这个
-keepclassmembers class android.support.v7.widget.SearchView{
}
但还是一样的问题。
谁能解释为什么会这样?
禁用 progaurd 或将其设为 "false" 来自 build.gradle
它会增加大小,但会完成工作。
对我有用
你必须添加
-keep class android.support.v7.widget.SearchView { *; }
proguard-rules.pro 文件。
不知何故与proguard混淆有关,可能是SearchView中的错误。 (部分版本受影响,部分不受影响)