getActionView使用searchview

时间:2015-08-15 15:51:41

标签: android eclipse searchview

尝试让searchview在app上工作。

sdk min 17 max 22

在模拟器api 18上进行测试

menu 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>

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;
        }
    });
}

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

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

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

3 个答案:

答案 0 :(得分: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 { *; }

答案 1 :(得分:0)

这就是我将SearchView添加到菜单中的方法(这是在片段中):

@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
    final MenuItem item = menu.add("Search");
    item.setIcon(android.R.drawable.ic_menu_search);
    item.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM);
    final SearchView searchView = new SearchView(getActivity());
    searchView.setOnQueryTextListener(this);
    searchView.setIconifiedByDefault(true);
    item.setActionView(mSearchView);
}

另外,我还建议您切换到Android Studio。

答案 2 :(得分:0)

您正在使用支持库。试试这个:

@Override
public boolean onCreateOptionsMenu(final Menu menu) {
    getMenuInflater().inflate(R.menu.menu, menu);
    final SearchView searchView = (SearchView) MenuItemCompat.getActionView(menu.findItem(R.id.menu_search));
    // ...
    return true;
}