如何在 Xamarin.Android 中实现 Google.Android.Material.Slider ChangeListener 或 addOnChangeListener 事件

问题描述

添加一个控件 Google.Android.Material.Slider,当用户在其上选择一个值时,我需要监听。根据 Google 的文档 (https://material.io/components/sliders/android#using-sliders),侦听器可能是 addOnchangelistener 或 addOnSliderTouchListener,但这些事件无法在 Xamarin AndroidX Material 包上实现。

我正在使用包 Xamarin.Google.Android.Material 版本 1.3.0.1

是否有另一个事件会在选定值发生变化时侦听并返回选定值或其他实现方式?

解决方法

你可以通过反思得到他的方法,然后听听:

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
    }
}