上周我没有更改任何代码,但是这个问题昨天突然出现了。
这是方法:
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.search_menu, menu);
MenuItem item = menu.findItem(R.id.menu_search);
SearchView searchView = (SearchView) MenuItemCompat.getActionView(item);
searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
});
return super.onCreateOptionsMenu(menu);
}
当我尝试打开包含SearchView的活动时,应用程序关闭。 Logcat说:尝试在空对象引用上调用虚拟方法searchView.setOnQueryTextListener()
。
search_menu:
<menu xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:id="@+id/menu_search"
android:icon="@mipmap/ic_search"
android:title="@string/search"
android:inputType="text"
android:focusableInTouchMode="false"
app:actionViewClass="android.widget.SearchView"
app:showAsAction="ifRoom|collapseActionView" />
</menu>
searchview有什么问题?我已经尝试了类似问题中提供的所有方法,但是它们不起作用。
活动:
public class CategoryActivity extends Activity {
ArrayList<> mArrayList;
CustomAdapter listAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity);
mArrayList = new ArrayList<>();
Objects.requireNonNull(getActionBar()).setBackgroundDrawable(new ColorDrawable(Color.rgb(8,16,38)));
Objects.requireNonNull(getActionBar()).setDisplayHomeAsUpEnabled(true);
答案 0 :(得分:0)
您在菜单xml中声明了错误的SearchView
类型:
更改
app:actionViewClass="android.widget.SearchView"
到
app:actionViewClass="android.support.v7.widget.SearchView"
也要更改:
SearchView searchView = (SearchView) MenuItemCompat.getActionView(item);
收件人:
SearchView searchView = (SearchView) item.getActionView();
您使用的getActionView()
的签名已被弃用。
编辑:
在您的活动课程中,检查顶部的导入,必须有一行:
import android.support.v7.widget.SearchView;