Когда я нажимаю SearchView, событие щелчка не срабатывает (Xamarin.Android) - PullRequest
0 голосов
/ 29 июня 2018

У меня есть следующее SearchView

<SearchView
    android:minWidth="25px"
    android:minHeight="25px"
    android:background="@drawable/rounded_border"
    android:clickable="true"
    android:iconifiedByDefault="false"
    android:focusable="false"
    android:layout_weight="1"
    android:layout_width="match_parent"
    android:layout_height="0dp"
    android:id="@+id/searchViewCustomers" />

Когда я нажимаю на него, я хочу, чтобы один из виджетов действия стал visible, а другой стал gone вот так:

searchView.Click += delegate
{
    customersRecyclerView.Visibility = ViewStates.Visible;
    customerDataContainer.Visibility = ViewStates.Gone;
};

Но когда я запускаю приложение и нажимаю на searchView, виджеты не становятся visible/gone, а когда я ставлю точку останова на serachView.Click, выполнение программы там никогда не останавливается. Как сделать виджеты видимыми / пропавшими, когда я нажимаю на виджет searchView?

1 Ответ

0 голосов
/ 29 июня 2018

Я бы добавил это, добавив событие изменения фокуса в представление поиска:

 searchView.FocusChange += SearchView_FocusChange;
 private void SearchView_FocusChange(object sender, View.FocusChangeEventArgs e)
    {
              if(searchView.HasFocus)
              {
               //Visibility code
              }
    }

ОБНОВЛЕНИЕ: Прежде всего, я бы использовал AppViewat Searchview для совместимости. Примерно так:

<android.support.v7.widget.SearchView
android:minWidth="25px"
android:minHeight="25px"
android:background="@drawable/rounded_border"
android:clickable="true"
android:iconifiedByDefault="false"
android:focusable="false"
android:layout_weight="1"
android:layout_width="match_parent"
android:layout_height="0dp"
android:id="@+id/searchViewCustomers" />

Тогда я бы попробовал использовать слушатель смены фокуса (как выше).

Если это не сработает, я бы использовал обработчик изменения фокуса запроса примерно так:

searchView.SetOnQueryTextFocusChangeListener(new FocusChangeListenerClass());

И добавьте класс слушателя примерно так:

public class FocusChangeListenerClass : Java.Lang.Object, IOnFocusChangeListener
{
    public void OnFocusChange(Android.Views.View v, bool hasFocus)
    {

    }
}

Обновление:

Activity:

public class ClientsActivity : Activity
{
    .......
    .......
    Android.Widget.SearchView searchView;
    RecyclerView customersRecyclerView;
    ScrollView customerDataContainer;
    .......
    protected override void OnCreate(Bundle savedInstanceState)
    {
         ........
         ........
         searchView.SetOnQueryTextFocusChangeListener(new FocusChangeListenerClass(ref customersRecyclerView, ref customerDataContainer));
    }
}

FocusChangeListenerClass.cs:

public class FocusChangeListenerClass : Java.Lang.Object, IOnFocusChangeListener
{
    RecyclerView customersRecyclerView;
    ScrollView customerDataContainer;
    public FocusChangeListenerClass(ref RecyclerView recyclerView, ref ScrollView dataContainer)
    {
        customersRecyclerView = recyclerView;
        customerDataContainer = dataContainer;
    }

    public void OnFocusChange(Android.Views.View v, bool hasFocus)
    {
        if(hasFocus == true)
        {
            customersRecyclerView.Visibility = ViewStates.Visible;
            customerDataContainer.Visibility = ViewStates.Gone;
        }
        else
        {
            customersRecyclerView.Visibility = ViewStates.Gone;
            customerDataContainer.Visibility = ViewStates.Visible;
        }
    }

}

Нет необходимости изменять <SearchView> на <android.support.v7.widget.SearchView> в файле .axml.

...