Android创建自定义SearchView搜索操作

时间:2011-08-04 09:23:25

标签: android android-3.0-honeycomb

在我的应用程序中,我正在使用带有自定义SearchView的Action Bar。我想在用户点击搜索字段中的输入按钮时使用一些自定义代码。但我无法找到一种方法来捕捉用户点击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;
    }

}

在这里你可以看到我尝试了两种方法:

  1. 从提交按钮抓取onclick事件。那没用 因为它只在我点击搜索图标打开时才触发 搜索查看。
  2. 在SearchView中捕获按键。那没用 无论是。我没有按任何按键给你回复。
  3. 有没有人有办法使用此SearchView进行自定义搜索操作?

    更新:

    如下面PJL所述:您不需要自定义对话框来覆盖此行为。普通的SearchView小部件可以正常工作。

1 个答案:

答案 0 :(得分:46)

获取搜索视图并添加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" />