2013-02-26 2 views
1

Может кто-нибудь понять, почему это не работает ..SearchView setOnClickListener НЕ РАБОЧАЯ

Мой SearchView находится в ActionBar и всегда отображается. Я хочу знать, когда пользователь НАЖМЕТЕ поисковое исследование ... не когда он расширяет или получает фокус.

Этот код находится в пределах onCreateOptionsMenu

   SearchView = _searchView; 

       SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE); 
      _searchView = (SearchView) menu.findItem(R.id.menu_finder_text_search).getActionView(); 
      _searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName())); 
      _searchView.setIconifiedByDefault(false); // Do not iconify the widget, we want to keep it open! 
      _searchView.setFocusable(false); 
      _searchView.setClickable(true); 

      _searchView.setOnClickListener(new OnClickListener() { 

       @Override 
       public void onClick(View v) { 
        //DO SOMETHING! 
       } 
      }); 

Anyone?

ответ

3

SearchView наследуется от LinearLayout, поэтому мы можем setOnClickListener для каждого ребенка, как это:

public static void setSearchViewOnClickListener(View v, OnClickListener listener) { 
    if (v instanceof ViewGroup) { 
     ViewGroup group = (ViewGroup)v; 
     int count = group.getChildCount(); 
     for (int i = 0; i < count; i++) { 
      View child = group.getChildAt(i); 
      if (child instanceof LinearLayout || child instanceof RelativeLayout) { 
       setSearchViewOnClickListener(child, listener); 
      } 

      if (child instanceof TextView) { 
       TextView text = (TextView)child; 
       text.setFocusable(false); 
      } 
      child.setOnClickListener(listener); 
     } 
    } 
} 

от: http://www.trinea.cn/android/searchview-setonclicklistener-not-working/

+0

Кажется, не работает для меня – Nikaoto

0

Используйте интерфейс OnTouchListener: http://developer.android.com/reference/android/view/View.OnTouchListener.html

Это требует чуть-чуть больше коды реализации, но дает превосходный контроль над пользовательским интерфейсом. Это решение предполагает, что пользователь будет использовать сенсорный экран для взаимодействия с представлением.

+0

Это то, что я изначально думал, до сих пор это не реагирует, когда пользователь прикасается к SearchView \t \t _searchView.setOnTouchListener (новый OnTouchListener() { \t \t \t \t \t \t \t \t @Override \t \t \t \t общественности boolean onTouch (просмотр v, событие MotionEvent) { \t \t return false; \t \t \t \t} \t \t \t}); –

+0

О, хорошо.Может ли это быть вложенным представлением, захватывающим события касания? – brainmurphy1

+0

похоже, что поисковый запрос проглатывает все события касания/клика. –

1

Хорошо, это не отвечает на проблему, это только позволяет избежать этого. Я использовал эту ссылку для создания слушателя, когда отображается клавиатура. Это дает мне событие в нужное время для меня.

https://stackoverflow.com/a/7423586/1312937

+0

Не очень, но работает. Спасибо за ссылку. –

1

Попробуйте это:

1) Bind вид

@BindView(R.id.search) SearchView search; 

2) В своем onCreate() напишите следующий код.

search.setIconifiedByDefault(false); 
     search.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       search.setIconified(false); 
      } 
     }); 

3) И ваш SearchView должен иметь следующие атрибуты.

  <SearchView 
       android:id="@+id/search" 
       android:layout_width="match_parent" 
       android:layout_height="50dp" 
       android:layout_centerVertical="true" 
       android:background="@drawable/rounded_corners_box" 
       android:drawableLeft="@android:drawable/ic_menu_search" 
       android:imeOptions="actionSearch" 
       android:inputType="text" 
       android:maxLines="1" 
       android:queryHint="Search your item.." 
       android:textColor="@android:color/black" 
       android:textColorHint="@color/colorPrimary" 
       app:defaultQueryHint="Select locality"/> 

Примечание:

андроид: фон = "@ вытяжке/rounded_corners_box" - ваш собственный файл XML границы. android: drawableLeft = "@ android: drawable/ic_menu_search" - значок поиска из выпадающего файла.