如何在 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
    }
}