【问题标题】:void android.support.v7.widget.SearchView.setOnQueryTextListener(android.support.v7.widget.SearchView$OnQueryTextListener)无效的 android.support.v7.widget.SearchView.setOnQueryTextListener(android.support.v7.widget.SearchView$OnQueryTextListener)
【发布时间】:2017-07-24 10:02:30
【问题描述】:

我在 CustomAdapter 上执行 SearchView,它将搜索 Gate Name。在我尝试运行该应用程序后,它突然崩溃并给我上述错误。我不知道我什至做错了哪一部分,导致每次尝试运行我的应用程序时都会出现此问题。

MainActivity.java

@Override
public boolean onCreateOptionsMenu(Menu menu) {

    getMenuInflater().inflate(R.menu.main_menu, menu);

    MenuItem searchItem = menu.findItem(R.id.item_search);
    SearchView searchView = (SearchView) searchItem.getActionView();

    searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
        @Override
        public boolean onQueryTextSubmit(String query) {
            return false;
        }

        @Override
        public boolean onQueryTextChange(String newText) {
            List<Gate> gateSearchList = new ArrayList<Gate>();

            for (Gate gate : gateList) {
                if (gate.getGateName().toLowerCase().contains(newText.toLowerCase())) {
                    gateSearchList.add(gate);
                }
            }

            adapter = new GateAdapter(MainActivity.this, gateSearchList);
            lv.setAdapter(adapter);
            return true;
        }
    });

    return super.onCreateOptionsMenu(menu);
}
 @Override
public boolean onOptionsItemSelected(MenuItem item) {
    if (item.getItemId() == R.id.action_logout) {
        logout();
    }
    return super.onOptionsItemSelected(item);
}

main_menu.xml

 <item
    android:id="@+id/item_search"
    android:icon="@drawable/ic_action_search"
    android:actionViewClass="android.support.v7.widget.SearchView"
    app:showAsAction="ifRoom|collapseActionView"
    android:title="Search">

</item>
<item android:id="@+id/action_logout"
    android:title="Log Out"
    app:showAsAction="never"/>

这是logcat中的错误信息:

java.lang.NullPointerException: 尝试调用虚方法 'void android.support.v7.widget.SearchView.setOnQueryTextListener(android.support.v7.widget.SearchView$OnQueryTextListener)' 在空对象引用上

也说明错误也来自这行代码:

searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {

我希望有人能够为我提供解决我的问题的解决方案。

【问题讨论】:

  • 对不起,我编程不是很好。我也只是个学生。所以我可能需要一些帮助,因为我在修复错误方面很糟糕
  • 不。那是什么?

标签: android nullpointerexception searchview


【解决方案1】:

android:actionViewClass 更改为app:actionViewClass,因为您使用的是支持库中的SearchView

<item
    android:id="@+id/item_search"
    android:icon="@drawable/ic_action_search"
    app:actionViewClass="android.support.v7.widget.SearchView"
    app:showAsAction="ifRoom|collapseActionView"
    android:title="Search">

【讨论】:

  • 天啊。有用!!非常感谢!
【解决方案2】:

像这样在res/values/xml/searchable.xml 中创建一个文件

<?xml version="1.0" encoding="utf-8"?>
 <searchable xmlns:android="http://schemas.android.com/apk/res/android"
  android:hint="search hint"
  android:label="@string/app_name" />

并像这样在应用程序标记文件的清单中添加此元数据标记

        <meta-data android:name="android.app.searchable"
        android:resource="@xml/searchable" />

像这样改变你的 oncreate 菜单

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.main_menu, menu);

    final MenuItem item = menu.findItem(R.id.R.id.item_search);
    final SearchView searchView = (SearchView) MenuItemCompat.getActionView(item);

    return true;

}

【讨论】:

  • 它仍然给出同样的错误。该错误甚至表明与此行有关:searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
  • 添加带问题的logcat
  • 没关系。我已经发现了这个问题。 Rajendran 设法发现了我的错误。它是 app:actionViewClass="android.support.v7.widget.SearchView"。我把android而不是app。这是我的错
  • 感谢您的帮助。感谢您的帮助和指导。
【解决方案3】:

在这里为可能面临类似问题的其他人发布此信息。

跟进 Jasmin John 的观点,我通过添加解决了 pro-guard 规则的问题

-keep class android.support.v7.widget.SearchView { *; }

【讨论】:

  • @MacaronLover 您需要添加到您的 proguard 文件中。 this link should help
  • @Poorya 它需要进入“proguard-android.txt”文件本身还是“build.gradle”文件?
  • 到 proguard-android.txt
【解决方案4】:

我在调试代码时遇到了同样的问题,但当我构建 apk 并运行它时崩溃了。

我在 build.gradle 文件中使用了 minifyEnabled false,它工作正常

buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }

【讨论】:

  • 在发布版本中禁用缩小是一个好习惯吗?
【解决方案5】:

我的 Menu.xml 文件有问题,所以我更改了这个:

app:actionViewClass="android.support.v7.widget.SearchView"

在这个:

app:actionViewClass="androidx.appcompat.widget.SearchView" />

【讨论】:

    【解决方案6】:

    别忘了在你的(菜单->yourfilename.xml)中添加这个

    app:actionViewClass="androidx.appcompat.widget.SearchView"
    

    请确保您在您的.java 文件中也使用相同类的searchview

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-29
      相关资源
      最近更新 更多