Не удалось создать SearchView - PullRequest
0 голосов
/ 30 января 2020

Я пытаюсь создать SearchView для одного из моих 4 элементов MenuI, которые создаются программно, однако я получаю NPE, когда использую xml для своего SearchView.

xml / search_view. xml

<?xml version="1.0" encoding="utf-8"?>
<SearchView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/simpleSearchView"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content">
</SearchView>

Java

   @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        super.onCreateOptionsMenu(menu);

        MenuItem searchItem = menu.add(Menu.NONE, R.id.search_card, 1, R.string.search_card);
        searchItem.setIcon(R.drawable.search);
        searchItem.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);

        SearchView searchView = findViewById(R.id.simpleSearchView);
        searchItem.setActionView(searchView);
        if (searchView != null) {
            searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
                @Override
                public boolean onQueryTextSubmit(String s) {
                    return true;
                }

                @Override
                public boolean onQueryTextChange(String s) {
                    return false;
                }
            });
        } else {
            // enters here
        }

        MenuItem trashCardItem = menu.add(Menu.NONE, R.id.delete_card, 2, R.string.delete_card);
        ...
    }

Как мне решить эту проблему, чтобы один из моих элементов MenuItms выступал в качестве SearchView?

1 Ответ

1 голос
/ 01 февраля 2020

Метод searchItem.setActionView() требует представления в качестве ввода. В вашем случае вы должны надуть свой макет вместо вызова findViewById(R.id.simpleSearchView) метода. Поэтому изменение

SearchView searchView = findViewById(R.id.simpleSearchView);

на

SearchView searchView = (SearchView) LayoutInflater.from(this).inflate(R.layout.search_view, null);

решит проблему. Кстати, NPE не имеет отношения к этой части вашего кода. Проверьте трассировку стека, чтобы найти источник исключения.

...