getActionView使用searchview返回null

Byr*_*lin 2 eclipse android searchview

试图让searchview在app上运行.

sdk min 17 max 22

在模拟器api上测试18

菜单xml

<menu xmlns:android="http://schemas.android.com/apk/res/android"
      xmlns:app="http://schemas.android.com/apk/res-auto">    
    <item
        android:id="@+id/action_settings"
        android:orderInCategory="100"
        android:title="@string/action_settings"
        app:showAsAction="never"/>
    <item android:id="@+id/search" 
        android:icon="@drawable/ic_action_search" 
        android:title="@string/search_title" 
        app:showAsAction="ifRoom|collapseActionView" 
        android:orderInCategory="200" 
        app:actionViewClass="android.support.v7.widget.SearchView">        
    </item> 
    <item android:id="@+id/scan" 
        android:title="@string/scan" 
        android:showAsAction="ifRoom"
        android:orderInCategory="300">        
    </item>   
</menu>
Run Code Online (Sandbox Code Playgroud)

onCreateOptionsMenu

@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
    super.onCreateOptionsMenu(menu, inflater);
    // Inflate the menu; this adds items to the action bar if it is present.
    inflater.inflate(R.menu.material_toolbar, menu);

    SearchView searchView = (SearchView) menu.findItem(R.id.search).getActionView();
    searchView.setOnQueryTextListener(new OnQueryTextListener() {           
        @Override
        public boolean onQueryTextSubmit(String query) {
            Log.d(TAG, "onQueryTextSubmit");
            return false;
        }

        @Override
        public boolean onQueryTextChange(String newText) {
            materialUpdate();
            return false;
        }
    });
}
Run Code Online (Sandbox Code Playgroud)

运行调试并查看搜索菜单项会将操作显示为null.

布局显示将android.support.v7.widget.SearchView显示为未知的xml属性.

我在这个项目中使用的是Eclipse而不是Android Studio.

Ren*_*nza 5

您是否正在使用Proguard或以某种方式缩小代码?

https://code.google.com/p/android/issues/detail?id=58508

当您使用像Proguard这样的minify方法时,不会直接访问(但通过某种声明方式或反射)的类和方法.为避免这种情况,您需要指示构建专门保留此类/方法.

在这种情况下,可以删除SearchView类,因为不直接调用.

尝试在proguard规则文件中添加此项(在gradle文件上检查getDefaultProguardFile上的正确文件名):

-keep class android.support.v7.widget.SearchView { *; }
Run Code Online (Sandbox Code Playgroud)