如何在 Xamarin.Android 中实现 Google.Android.Material.Slider ChangeListener 或 addOnChangeListener 事件
How to implement Google.Android.Material.Slider ChangeListener or addOnChangeListener events in Xamarin.Android
我添加了一个控件 Google.Android.Material.Slider 并且我需要在用户 select 给它一个值时监听。根据 Google 的文档 (https://material.io/components/sliders/android#using-sliders),侦听器可能是 addOnChangeListener 或 addOnSliderTouchListener,但这些事件无法在 Xamarin AndroidX Material 包上实现。
我正在使用包 Xamarin.Google.Android.Material 版本 1.3.0.1
有另一个事件监听并且return selected 值改变时或其他实现方式?
你可以通过反射得到他的方法,然后听听:
Slider slider = FindViewById<Slider>(Resource.Id.slider1);
var method = Java.Lang.Class.ForName("com.google.android.material.slider.BaseSlider").GetDeclaredMethods().FirstOrDefault(x => x.Name == "addOnChangeListener");
method?.Invoke(slider, this); // this is implementing IBaseOnChangeListener
所以让你的 activity 实现 IBaseOnChangeListener
接口:
public class YourActivity: AppCompatActivity, IBaseOnChangeListener
{
protected override void OnCreate(Bundle savedInstanceState)
{
base.OnCreate(savedInstanceState);
...
Slider slider = FindViewById<Slider>(Resource.Id.slider1);
var method = Java.Lang.Class.ForName("com.google.android.material.slider.BaseSlider").GetDeclaredMethods().FirstOrDefault(x => x.Name == "addOnChangeListener");
method?.Invoke(slider, this); // this is implementing IBaseOnChangeListener
}
public void OnValueChange(Java.Lang.Object p0, float p1, bool p2)
{
Console.WriteLine("slide:" + p1);//p1 is the value you want
}
}
我添加了一个控件 Google.Android.Material.Slider 并且我需要在用户 select 给它一个值时监听。根据 Google 的文档 (https://material.io/components/sliders/android#using-sliders),侦听器可能是 addOnChangeListener 或 addOnSliderTouchListener,但这些事件无法在 Xamarin AndroidX Material 包上实现。
我正在使用包 Xamarin.Google.Android.Material 版本 1.3.0.1
有另一个事件监听并且return selected 值改变时或其他实现方式?
你可以通过反射得到他的方法,然后听听:
Slider slider = FindViewById<Slider>(Resource.Id.slider1);
var method = Java.Lang.Class.ForName("com.google.android.material.slider.BaseSlider").GetDeclaredMethods().FirstOrDefault(x => x.Name == "addOnChangeListener");
method?.Invoke(slider, this); // this is implementing IBaseOnChangeListener
所以让你的 activity 实现 IBaseOnChangeListener
接口:
public class YourActivity: AppCompatActivity, IBaseOnChangeListener
{
protected override void OnCreate(Bundle savedInstanceState)
{
base.OnCreate(savedInstanceState);
...
Slider slider = FindViewById<Slider>(Resource.Id.slider1);
var method = Java.Lang.Class.ForName("com.google.android.material.slider.BaseSlider").GetDeclaredMethods().FirstOrDefault(x => x.Name == "addOnChangeListener");
method?.Invoke(slider, this); // this is implementing IBaseOnChangeListener
}
public void OnValueChange(Java.Lang.Object p0, float p1, bool p2)
{
Console.WriteLine("slide:" + p1);//p1 is the value you want
}
}