【问题标题】:Why searchview is a null object reference?为什么 searchview 是一个空对象引用?
【发布时间】:2019-05-11 17:18:33
【问题描述】:

上周没改代码,昨天突然出现这个问题。

方法如下:

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

搜索菜单:

<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>

搜索视图有什么问题?我已经尝试了类似问题中提供的所有方法,但它们不起作用。

活动:

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

【问题讨论】:

    标签: android nullpointerexception searchview


    【解决方案1】:

    您在菜单 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;
    

    【讨论】:

    • 感谢您的回答,我已经应用了所有更改,但仍然无法正常工作。
    • 之前试过,没有任何变化
    • 从您发布的代码中我看不到任何其他问题。如果你想发布你的活动课程。
    • 我会再尝试一件事,如果没有帮助,我会从活动中添加代码。
    • 添加了活动。可能在最后两行出现问题?我不确定它是否正确。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-13
    • 1970-01-01
    • 2013-01-25
    • 2020-12-23
    • 1970-01-01
    相关资源
    最近更新 更多