Xamarin.Android中NumberPicker滚动至最大值后无法正常重置
Xamarin.Android NumberPicker 重置卡顿异常问题
我在使用Xamarin.Android(非Xamarin.Forms)开发一款分数追踪器时,遇到了NumberPicker的异常问题。作为Xamarin新手(具备C#开发经验),尝试搜索解决方案但未找到类似案例,推测是搜索术语使用不当,因此创建了一个最小复现项目,问题完全一致。
复现步骤
- 创建带有菜单、FAB等组件的Xamarin.Android新项目
- 在
content_main.xml中添加NumberPicker控件 - 在
MainActivity.cs中配置NumberPicker的数值范围、事件监听,以及用于重置的Snackbar
代码示例
content_main.xml
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" app:layout_behavior="@string/appbar_scrolling_view_behavior" tools:showIn="@layout/app_bar_main"> <NumberPicker android:id="@+id/picker" android:layout_width="wrap_content" android:layout_height="wrap_content" android:gravity="center" /> </RelativeLayout>
MainActivity.cs
using System; using Android.App; using Android.OS; using Android.Runtime; using Android.Views; using Android.Widget; using AndroidX.AppCompat.App; using AndroidX.AppCompat.Widget; using AndroidX.Core.View; using AndroidX.DrawerLayout.Widget; using Google.Android.Material.FloatingActionButton; using Google.Android.Material.Navigation; using Google.Android.Material.Snackbar; using Toolbar = AndroidX.AppCompat.Widget.Toolbar; namespace NumberPickerBugDemoProject { [Activity(Label = "@string/app_name", Theme = "@style/AppTheme.NoActionBar", MainLauncher = true)] public class MainActivity : AppCompatActivity, NavigationView.IOnNavigationItemSelectedListener { private Snackbar m_snackBar; private NumberPicker m_picker; private int m_score; // 实际项目中该字段位于模型内 protected override void OnCreate(Bundle savedInstanceState) { // 默认模板代码... SetupNumberPicker(); CreateSnackbar(m_picker); } private void SetupNumberPicker() { m_picker = FindViewById<NumberPicker>(Resource.Id.picker); if (m_picker != null) { m_picker.Value = 0; m_picker.MinValue = 0; m_picker.MaxValue = 13; m_picker.WrapSelectorWheel = false; m_picker.ValueChanged += (sender, e) => { m_score = e.Picker.Value; if (e.Picker.Value >= 13) { m_snackBar.Show(); } }; } } private void CreateSnackbar(NumberPicker picker) { m_snackBar = Snackbar.Make(picker, "Reset?", Snackbar.LengthIndefinite); m_snackBar.SetAction("Action", (view) => { m_picker.Value = 0; m_score = 0; }); } // 默认模板代码... } }
问题现象
运行项目后,当滚动NumberPicker到最大值13时,会触发显示Snackbar。点击Snackbar的Action按钮尝试将数值重置为0时,NumberPicker会卡在13无法重置。直接手动输入数值不会出现此问题,但滚动到13后,仅需1-5次操作就会触发该bug,只有来回切换数值后才能正常完成重置。
内容的提问来源于stack exchange,提问作者ChibiPhoenix
相关产品推荐
相关产品推荐

