Почему searchview является пустой ссылкой на объект? - PullRequest
0 голосов
/ 10 декабря 2018

Я не менял код на прошлой неделе, но эта проблема неожиданно появилась вчера.

Вот метод:

@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 голосов
/ 10 декабря 2018

Вы объявляете в меню 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;
...