web-dev-qa-db-ja.com

Android SearchView onclick

私は次のようなsearchViewを持っています:

private void setupSearchView() {
    mSearchView = (SearchView) getActivity().findViewById(
            R.id.search_view_neue);
    setSearchViewBackground();
    mSearchView.setOnClickListener(this);
    mSearchView.setOnQueryTextListener(this);
}




    public boolean onQueryTextSubmit(String query) {
    searchcounter = searchcounter + 1;

    setSearchViewBackground();
    ArrayList<WissensdokumenteRecord> documents = settingListContent(new ArrayList<WissensdokumenteRecord>());

    setListAdapter(new NeueWissensdokumentItemAdapter(
            inflater.getContext(), R.layout.row_example, documents));
    InputMethodManager im = (InputMethodManager) getActivity()
            .getSystemService(Context.INPUT_METHOD_SERVICE);
    im.hideSoftInputFromWindow(getActivity().getCurrentFocus()
            .getWindowToken(), 0);

    return false;
}




<SearchView
    Android:id="@+id/search_view_neue"
    Android:layout_width="match_parent"
    Android:layout_height="60dp"
    Android:layout_marginLeft="40dp"
    Android:layout_marginRight="40dp"
    Android:background="@drawable/border_searchview"
    Android:maxWidth="540dp"
    Android:queryHint="Neue Dokumente suchen" >
</SearchView>

したがって、検索ビューの動作は、検索ボタンをクリックするとキーボードが開くというものです。今、私は何かを検索することができます。検索ビューの任意の場所をクリックして検索を行うことはできますか?誰かが私のための例を持っていますか?

11

私はこれを次の方法で行うことができました:

クリックリスナーで検索ビューを設定する

mSearchView.setOnClickListener(this);

OnClickイベントをキャッチします。

@Override
public void onClick(View v) {
    switch (v.getId()) {
        case R.id.searchView:
            mSearchView.onActionViewExpanded();
            break;
    }
}

このようにして、検索バーのどこかをクリックすると、キーボードと検索がアクティブになります。

13
Spiri

これはあなたが達成しようとしていることを正確に行います。 setIconified(false)は、SearchViewのこの端に十字アイコンを保持するため、ユーザーは虫眼鏡がクリックされた場合と同じ方法でキャンセルできます。

searchView.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        searchView.setIconified(false);
    }
});
5
Bap

setOnSearchClickListenerlistnerを使用してSearchViewクリックを検出することを提案する必要がありますAndroid docs

setOnSearchClickListener

void setOnSearchClickListener(View.OnClickListenerリスナー)

検索ボタンが押されたときに通知するリスナーを設定します。

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    MenuInflater menuInflater = getMenuInflater();
    menuInflater.inflate(R.menu.orders_menu, menu);
    MenuItem searchItem = menu.findItem(R.id.action_search);
    SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);

    if (searchView != null) {
        searchView = (SearchView) searchItem.getActionView();
        searchView.setOnSearchClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
              //perform your click operation here 
            }
        });
  return true;
}
4
Kapil Rajput

OnClickListenerを設定する必要がある理由がわかりません。 SearchViewをクリックすると、テキストカーソルが更新されます。検索を実行するには、キーボードのIMEアクションがあります。それをクリックすると検索が実行される場合、カーソルなどを変更することはできません。テキストフィールドでフォーカス/更新カーソル以外のものを作成することは一般的に間違った動作です。

私が覚えている限り、OnQueryTextListenerでキーボードを非表示にする必要はありません。自動的にヒットするはずです。 OnQueryTextSubmitで検索を処理します

Sherlock ActionBar SearchView setOnKeyListenerで検索

0

子へのすべてのタッチをインターセプトし、タッチダウン時にコールバックを実行する検索ウィジェット:

_class InterceptTouchSearchView(context: Context, attrs: AttributeSet) : SearchView(context, attrs) {

  var onActionDownIntercepted: (() -> (Unit))? = null

  override fun onInterceptTouchEvent(ev: MotionEvent?): Boolean {
    return true
  }

  @SuppressLint("ClickableViewAccessibility")
  override fun onTouchEvent(ev: MotionEvent?): Boolean {
    if (ev?.action == MotionEvent.ACTION_DOWN) {
      onActionDownIntercepted?.invoke()
    }
    return false
  }
}
_

使用法:search_view.onActionDownIntercepted = { onSearchFieldClicked() }

0
Frank