为什么searchview是空对象引用?

时间:2018-12-10 18:54:00

标签: android nullpointerexception searchview

上周我没有更改任何代码,但是这个问题昨天突然出现了。

这是方法:

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

1 个答案:

答案 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;