Android getActionView与searchview一起返回null
正在尝试让searchview在应用程序上工作 sdk最小17最大22 仿真器api 18的测试 菜单xmlAndroid getActionView与searchview一起返回null,android,eclipse,searchview,Android,Eclipse,Searchview,正在尝试让searchview在应用程序上工作 sdk最小17最大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"
<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>
运行“调试”并查看“搜索”菜单项时,操作显示为空
布局显示将android.support.v7.widget.SearchView显示为未知xml属性
我在这个项目上使用Eclipse而不是Android Studio。这就是我如何将SearchView添加到菜单中的方式(这在一个片段中):
另外,我还建议您切换到Android Studio。您正在使用支持库。试试这个:
@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;
}
我不确定我的东西到底出了什么问题。这一切似乎都合乎逻辑。我怀疑我有一些拼写错误,它们是不正确的xmlns。但它的工作方式,我有它 我非常感谢您的帮助,但建议您解释一下您认为的问题是什么,解决方法是什么以及原因。它真的帮助人学习 MenuItemCompat是帮助以向后兼容的方式访问API级别4之后引入的MenuItem中的功能的工具。这种情况下没有必要这样做 请继续回答问题,这确实有帮助
谢谢您是否以某种方式使用Proguard或缩小代码 当您使用像Proguard这样的minify方法时,您无法直接访问(但通过某种声明性方式或反射)的类和方法将被删除。为了避免这种情况,您需要指示构建专门保留这些类/方法 在这种情况下,可以删除SearchView类,因为它不是直接调用的 尝试在proguard规则文件中添加此文件(在GetDefaultProGuard文件中检查gradle文件的正确文件名):
谢谢你!帮我省了很多麻烦!:)
@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);
}
@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;
}
-keep class android.support.v7.widget.SearchView { *; }