无法创建 SearchView
Failing to create SearchView
我正在尝试为我的 4 个菜单项之一创建一个 SearchView,这些菜单项是以编程方式创建的,但是当我为我的 SearchView 使用 xml 时,我得到了一个 NPE。
xml/search_view.xml
<?xml version="1.0" encoding="utf-8"?>
<SearchView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/simpleSearchView"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
</SearchView>
Java
@Override
public boolean onCreateOptionsMenu(Menu menu) {
super.onCreateOptionsMenu(menu);
MenuItem searchItem = menu.add(Menu.NONE, R.id.search_card, 1, R.string.search_card);
searchItem.setIcon(R.drawable.search);
searchItem.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);
SearchView searchView = findViewById(R.id.simpleSearchView);
searchItem.setActionView(searchView);
if (searchView != null) {
searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
@Override
public boolean onQueryTextSubmit(String s) {
return true;
}
@Override
public boolean onQueryTextChange(String s) {
return false;
}
});
} else {
// enters here
}
MenuItem trashCardItem = menu.add(Menu.NONE, R.id.delete_card, 2, R.string.delete_card);
...
}
我该如何解决这个问题,才能让我的 MenuItem 之一充当 SearchView?
searchItem.setActionView()
方法需要一个视图作为输入。在你的情况下,你必须膨胀你的布局而不是调用 findViewById(R.id.simpleSearchView)
方法。所以改变
SearchView searchView = findViewById(R.id.simpleSearchView);
到
SearchView searchView = (SearchView) LayoutInflater.from(this).inflate(R.layout.search_view, null);
将解决问题。
顺便说一句,NPE 与您的这部分代码无关。检查堆栈跟踪以查找异常源。
我正在尝试为我的 4 个菜单项之一创建一个 SearchView,这些菜单项是以编程方式创建的,但是当我为我的 SearchView 使用 xml 时,我得到了一个 NPE。
xml/search_view.xml
<?xml version="1.0" encoding="utf-8"?>
<SearchView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/simpleSearchView"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
</SearchView>
Java
@Override
public boolean onCreateOptionsMenu(Menu menu) {
super.onCreateOptionsMenu(menu);
MenuItem searchItem = menu.add(Menu.NONE, R.id.search_card, 1, R.string.search_card);
searchItem.setIcon(R.drawable.search);
searchItem.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);
SearchView searchView = findViewById(R.id.simpleSearchView);
searchItem.setActionView(searchView);
if (searchView != null) {
searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
@Override
public boolean onQueryTextSubmit(String s) {
return true;
}
@Override
public boolean onQueryTextChange(String s) {
return false;
}
});
} else {
// enters here
}
MenuItem trashCardItem = menu.add(Menu.NONE, R.id.delete_card, 2, R.string.delete_card);
...
}
我该如何解决这个问题,才能让我的 MenuItem 之一充当 SearchView?
searchItem.setActionView()
方法需要一个视图作为输入。在你的情况下,你必须膨胀你的布局而不是调用 findViewById(R.id.simpleSearchView)
方法。所以改变
SearchView searchView = findViewById(R.id.simpleSearchView);
到
SearchView searchView = (SearchView) LayoutInflater.from(this).inflate(R.layout.search_view, null);
将解决问题。
顺便说一句,NPE 与您的这部分代码无关。检查堆栈跟踪以查找异常源。