web-dev-qa-db-ja.com

searchViewのキーボード検索ボタンを聞く方法

SearchViewがあります。ユーザーがkeyboard検索ボタンをクリックすると、サーバーを呼び出す必要があります。リスナーのコードはどのように見えますか? OnClickListenerを使用する必要があると思います。しかし、それが検索ボタンであることを知るための内部コードです。それをどのように決定するかはわかりません。

16
learner

私はこのようにしました

onQueryTextSubmitは、探しているメソッドです。

検索ビューにsetOnQueryTextListenerを設定します。

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

    MenuItem searchItem = menu.findItem(R.id.search_city);
    searchView = (SearchView) searchItem.getActionView();
    searchView.setQueryHint("Search View Hint");

    searchView.setOnQueryTextListener(new OnQueryTextListener() {

        @Override
        public boolean onQueryTextChange(String newText) {
            //Log.e("onQueryTextChange", "called");
            return false;
        }

        @Override
        public boolean onQueryTextSubmit(String query) {


            // Do your task here

            return false;
        }

    });

    return true;
}

この助けを願っています

64
Qadir Hussain

これはkotlinバージョンです:

        searchView.setOnQueryTextListener(object : SearchView.OnQueryTextListener {

            override fun onQueryTextChange(s: String): Boolean {
                // make a server call
                return true
            }

            override fun onQueryTextSubmit(s: String): Boolean {
                val intent = Intent(applicationContext, YourSearchableActivity::class.Java)
                intent.putExtra(SearchManager.QUERY, s)
                intent.putExtra(CUSTOM_MESSAGE, "you can also add custom message when submitting the search action")
                intent.setAction(Intent.ACTION_SEARCH)
                startActivity(intent)
                return true
            }
        })
1
arjunaskykok

ここでは、Android Kotlinではなくベストアンサーを選択できます

        binding.edtSearch.setOnEditorActionListener(new TextView.OnEditorActionListener() {
        @Override
        public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
            if (actionId == EditorInfo.IME_ACTION_SEARCH) {
                // Your piece of code on keyboard search click
                if (AppValidator.isValid(SearchEventsActivity.this, binding.edtSearch, "Please enter your search keyword.")) {
                    searchKeyword = binding.edtSearch.getText().toString().trim();
                    //Search Events categories
                    callSearchEventsApi();
                }

                return true;
            }
            return false;
        }
    });

EditTextに次の行を追加したことを確認してください

Android:imeOptions="actionSearch"

以下のように:-

 <EditText
                Android:id="@+id/edtSearch"
                Android:layout_width="0dp"
                Android:layout_height="wrap_content"
                Android:layout_weight="1"
                Android:layout_marginLeft="@dimen/_15dp"
                Android:background="@null"
                Android:fontFamily="@font/roboto_regular"
                Android:textColorHint="@color/text_color_light"
                Android:layout_gravity="center"
                Android:textSize="@dimen/_16sp"
                Android:maxLines="1"
                Android:singleLine="true"
                Android:imeOptions="actionSearch"
                Android:hint="@string/search"/>

これが問題の解決に役立つことを願っています。

1
Karanvir Singh

SearchViewメソッド

setOnQueryTextLister

以下に示すようにあなたの仕事をします。

searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
            @Override
            public boolean onQueryTextSubmit(String query) {
                showSnackBar(query.toString());
                return false;
            }

            @Override
            public boolean onQueryTextChange(String newText) {
                return false;
            }
        });

ここでsearchViewはSearchViewのオブジェクトです。

0
DjP