You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 14:52:47