Android Создать пользовательское действие SearchView Search - PullRequest
13 голосов
/ 04 августа 2011

В моем приложении я использую панель действий с пользовательским SearchView в нем. Я хочу использовать пользовательский код, когда пользователь нажимает кнопку ввода в поле поиска. Но я не могу найти способ уловить момент, когда пользователь нажимает кнопку ввода в SearchView.

Теперь я попробовал несколько способов захвата поискового действия, но, похоже, не могу его найти.

Моя кнопка определена так:

<item
    android:id="@+id/action_bar_search"
    android:title="Search"
    android:icon="@drawable/ic_menu_search"
    android:showAsAction="always"
    android:actionViewClass="-package-.CustomSearchView"
    />

К этому относится класс CustomSearchView:

public class CustomSearchView extends SearchView implements OnClickListener, android.view.View.OnKeyListener{

    public CustomSearchView(Context context) {
        super(context);
        this.setOnSearchClickListener(this);
        this.setSubmitButtonEnabled(true);
            this.setOnClickListener(this);
        this.setOnKeyListener(this);
    }

    @Override
    public void onClick(View v) {

        Log.d("SEARCH", "Onclick! " + this.getQuery());
    }

    @Override
    public boolean onKey(View v, int keyCode, KeyEvent event) {
        // TODO Auto-generated method stub

        Log.d("SEARCH", "Search onkey");
        return false;
    }

}

Здесь вы можете видеть, что я попробовал 2 подхода:

  1. Поймать событие onclick с помощью кнопки отправки. Это не сработало так как он срабатывает только когда я нажал на значок поиска, чтобы открыть SearchView.
  2. Поймать нажатия клавиш в SearchView. Это не сработало или. Получил ответ от любой клавиши, которую я нажал там.

У кого-нибудь есть способ сделать пользовательское действие поиска с помощью этого SearchView?

UPDATE:

Как указано ниже PJL: вам не нужно настраивать диалог для переопределения этого поведения. Обычный виджет SearchView будет отлично работать для этого.

1 Ответ

46 голосов
/ 04 августа 2011

Получите вид поиска и добавьте OnQueryTextListener

final SearchView.OnQueryTextListener queryTextListener = new SearchView.OnQueryTextListener() {
    @Override
    public boolean onQueryTextChange(String newText) {
        // Do something
        return true;
    }

    @Override
    public boolean onQueryTextSubmit(String query) {
        // Do something
        return true;
    }
};

searchView.setOnQueryTextListener(queryTextListener);

Кстати, мое меню выглядит следующим образом:

<item android:id="@+id/menu_search"
    android:showAsAction="ifRoom"
    android:actionViewClass="android.widget.SearchView" />
...