Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android SearchView在ActionBar上,检测点击搜索_Android_Android Searchmanager_Android Search - Fatal编程技术网

Android SearchView在ActionBar上,检测点击搜索

Android SearchView在ActionBar上,检测点击搜索,android,android-searchmanager,android-search,Android,Android Searchmanager,Android Search,在我的应用程序中,与许多其他应用程序一样,有一个通用的搜索小部件() 只有在按下键盘上的搜索按钮时,我才会更改片段(并将搜索的术语传递给它) 我试过了 searchView.setOnSearchClickListener(new OnClickListener() { @Override public void onClick(View v) { } }); 但是,当您按下操作栏上的按钮时,会触发它,从而打开搜索输入,而不是单击keybord按钮搜索时 你知道怎么可能吗?这是我用于编辑文

在我的应用程序中,与许多其他应用程序一样,有一个通用的搜索小部件()

只有在按下键盘上的搜索按钮时,我才会更改片段(并将搜索的术语传递给它)

我试过了

searchView.setOnSearchClickListener(new OnClickListener() { 
@Override public void onClick(View v) { 
} });
但是,当您按下操作栏上的按钮时,会触发它,从而打开搜索输入,而不是单击keybord按钮搜索时


你知道怎么可能吗?

这是我用于编辑文本的代码。类似的事情也适用于你:

editTextSearch.setOnEditorActionListener(new TextView.OnEditorActionListener() {
@Override
public boolean onEditorAction(TextView view, int actionId, KeyEvent event) {
    if (actionId == EditorInfo.IME_ACTION_SEARCH) {
      //run query to the server
    }
    return false;
}
});

您可以在操作栏搜索中使用此按钮来检测搜索键:

searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {

            @Override
            public boolean onQueryTextSubmit(String s) {
                [You actions here]
                return false;
            }
}

试试这个代码。它很小,很容易理解

  @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.menu, menu);


        // Associate searchable configuration with the SearchView
        SearchManager searchManager =
                (SearchManager) getSystemService(Context.SEARCH_SERVICE);
        SearchView searchView =
                (SearchView) menu.findItem(R.id.search).getActionView();
        final EditText searchEditText = (EditText) searchView.findViewById(android.support.v7.appcompat.R.id.search_src_text);

        searchEditText.setHint("Search");

        searchEditText.setHintTextColor(getResources().getColor(R.color.white));
        searchView.setSearchableInfo(
                searchManager.getSearchableInfo(getComponentName()));

        searchEditText.setOnEditorActionListener(new TextView.OnEditorActionListener() {
            @Override
            public boolean onEditorAction(TextView view, int actionId, KeyEvent event) {
                if (actionId == EditorInfo.IME_ACTION_SEARCH) {
                    //run query to the server
                    Log.e("onClick: ", "-- " + searchEditText.getText().toString().trim());

                }
                return false;
            }
        });


        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.

        return super.onOptionsItemSelected(item);
    }
menu.xml文件

<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">

    <item
        android:id="@+id/search"
        android:icon="@android:drawable/ic_menu_search"
        android:title="Search"
        app:actionViewClass="android.support.v7.widget.SearchView"
        app:showAsAction="always" />

</menu>

首先,将IME选项设置为IME\u ACTION\u SEARCH forSearchView(尽管键盘可能会自动设置)

searchView.setImeOptions(EditorInfo.IME\u ACTION\u SEARCH)

接下来,检查是否在键盘上按下了搜索图标

    searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {

          public boolean onQueryTextSubmit(String query) {
               searchView.clearFocus();     // Close keyboard on pressing IME_ACTION_SEARCH option
               Log.d(TAG, "QueryTextSubmit : "+ query);
               //load search query
               return true;
    }

          @Override
          public boolean onQueryTextChange(String newText) {
               Log.d(TAG, "QueryTextChange: "+ newText);
               return false;
          }
});
注意:在这里,当按下键盘上的搜索图标时,将调用onquerytexsubmit()

此外,serchView.clearFocus()会折叠键盘


希望这就是您要查找的内容。

对我来说,我从SearchView获取EditText,并捕获“setOnEditorActionListener”,但默认的搜索操作仍在进行,提交后活动正在刷新。为了解决这个问题,我删除了

searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName()));
从我的onCreateOptions菜单方法,现在一切都很好地工作

 searchView.setOnSearchViewListener(new MaterialSearchView.SearchViewListener()
    {
        @Override
        public void onSearchViewShown()
        {
            //write your code
        }

        @Override
        public void onSearchViewClosed()
        {
            //write your code 
        }
    });
希望这有帮助