当我单击 SearchView 时,没有触发单击事件 (Xamarin.Android)
When I click SearchView, click event doesn't fire (Xamarin.Android)
我有以下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" />
当我点击它时,我希望 activity 的一个小部件变成 visible
,另一个变成 gone
,就像这样:
searchView.Click += delegate
{
customersRecyclerView.Visibility = ViewStates.Visible;
customerDataContainer.Visibility = ViewStates.Gone;
};
但是当我 运行 应用程序并点击 searchView
时,小部件不会变成 visible/gone
并且当我在 serachView.Click
上放置断点时,程序执行永远不会停在那里。当我点击 searchView
小部件时,如何制作小部件 visible/gone?
我的做法是,向搜索视图添加焦点更改事件:
searchView.FocusChange += SearchView_FocusChange;
private void SearchView_FocusChange(object sender, View.FocusChangeEventArgs e)
{
if(searchView.HasFocus)
{
//Visibility code
}
}
更新:
首先,出于兼容性目的,我会使用 Appcompat 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());
并添加监听器 class 类似这样的内容:
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;
}
}
}
不需要在.axml
文件中将<SearchView>
更改为<android.support.v7.widget.SearchView>
。
我有以下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" />
当我点击它时,我希望 activity 的一个小部件变成 visible
,另一个变成 gone
,就像这样:
searchView.Click += delegate
{
customersRecyclerView.Visibility = ViewStates.Visible;
customerDataContainer.Visibility = ViewStates.Gone;
};
但是当我 运行 应用程序并点击 searchView
时,小部件不会变成 visible/gone
并且当我在 serachView.Click
上放置断点时,程序执行永远不会停在那里。当我点击 searchView
小部件时,如何制作小部件 visible/gone?
我的做法是,向搜索视图添加焦点更改事件:
searchView.FocusChange += SearchView_FocusChange;
private void SearchView_FocusChange(object sender, View.FocusChangeEventArgs e)
{
if(searchView.HasFocus)
{
//Visibility code
}
}
更新: 首先,出于兼容性目的,我会使用 Appcompat 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());
并添加监听器 class 类似这样的内容:
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;
}
}
}
不需要在.axml
文件中将<SearchView>
更改为<android.support.v7.widget.SearchView>
。