item.getActionview() 总是给出 null
item.getActionview() always gives null
我在工具栏中有一个搜索视图作为选项菜单。
每当我尝试设置 setOnQueryTextListener
时,它都会给我一个 NullPointerException
:
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater menuInflater = getMenuInflater();
menuInflater.inflate(R.menu.menu, menu);
MenuItem item = menu.findItem(R.id.search);
SearchView searchView = (SearchView) item.getActionView(); //searchView: null item: "Search"
searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() { //searchView: null
@Override
public boolean onQueryTextSubmit(String query) {
return false;
}
@Override
public boolean onQueryTextChange(String newText) {
newText = newText.toLowerCase();
ArrayList<Note> newNotes = new ArrayList<>();
for(Note note: notes){
String name = note.getTitle().toLowerCase();
if(name.contains(newText)){
newNotes.add(note);
}
}
noteListAdapter.setFilter(newNotes);
return true;
}
});
return true;
}
我已经做过但没有成功的事情:
添加 -keep class android.support.v7.widget.SearchView { *; }
到混淆文件。
在我的 Java class 上实施 SearchView.OnQueryTextListener
。
menu.XML:
<?xml version="1.0" encoding="utf-8"?>
<menu
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item
android:id="@+id/search"
android:title="Search"
android:icon="@mipmap/search"
app:showAsAction="always|collapseActionView"
app:actionViewClass="android:support.v7.widget.SearchView"/>
<item
android:id="@+id/share"
android:title="Share"
android:icon="@mipmap/share"
app:showAsAction="ifRoom"/>
</menu>
你正在做这个
SearchView search = (SearchView) findItem(R.id.search).getActionView();
请这样做
SearchView search = (SearchView) menu.findItem(R.id.search).getActionView();
<item
android:id="@+id/search"
android:title="Search"
android:icon="@mipmap/search"
app:showAsAction="always|collapseActionView"
app:actionViewClass="android.support.v7.widget.SearchView"/>
你打错了,应该是android.support
而不是android:support
所以使用
<item
android:id="@+id/search"
android:title="Search"
android:icon="@mipmap/search"
app:showAsAction="always|collapseActionView"
app:actionViewClass="android.support.v7.widget.SearchView"/>
我在工具栏中有一个搜索视图作为选项菜单。
每当我尝试设置 setOnQueryTextListener
时,它都会给我一个 NullPointerException
:
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater menuInflater = getMenuInflater();
menuInflater.inflate(R.menu.menu, menu);
MenuItem item = menu.findItem(R.id.search);
SearchView searchView = (SearchView) item.getActionView(); //searchView: null item: "Search"
searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() { //searchView: null
@Override
public boolean onQueryTextSubmit(String query) {
return false;
}
@Override
public boolean onQueryTextChange(String newText) {
newText = newText.toLowerCase();
ArrayList<Note> newNotes = new ArrayList<>();
for(Note note: notes){
String name = note.getTitle().toLowerCase();
if(name.contains(newText)){
newNotes.add(note);
}
}
noteListAdapter.setFilter(newNotes);
return true;
}
});
return true;
}
我已经做过但没有成功的事情:
添加 -keep class android.support.v7.widget.SearchView { *; }
到混淆文件。
在我的 Java class 上实施 SearchView.OnQueryTextListener
。
menu.XML:
<?xml version="1.0" encoding="utf-8"?>
<menu
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item
android:id="@+id/search"
android:title="Search"
android:icon="@mipmap/search"
app:showAsAction="always|collapseActionView"
app:actionViewClass="android:support.v7.widget.SearchView"/>
<item
android:id="@+id/share"
android:title="Share"
android:icon="@mipmap/share"
app:showAsAction="ifRoom"/>
</menu>
你正在做这个
SearchView search = (SearchView) findItem(R.id.search).getActionView();
请这样做
SearchView search = (SearchView) menu.findItem(R.id.search).getActionView();
<item
android:id="@+id/search"
android:title="Search"
android:icon="@mipmap/search"
app:showAsAction="always|collapseActionView"
app:actionViewClass="android.support.v7.widget.SearchView"/>
你打错了,应该是android.support
而不是android:support
所以使用
<item
android:id="@+id/search"
android:title="Search"
android:icon="@mipmap/search"
app:showAsAction="always|collapseActionView"
app:actionViewClass="android.support.v7.widget.SearchView"/>