xamarin 当滚动到最大值时,NumberPicker不会像您期望的那样重置

w46czmvw  于 2023-08-01  发布在  其他
关注(0)|答案(1)|浏览(83)

我正在Xamarin.Android(不是Forms)中做一个分数跟踪器,遇到了NumberPicker的问题。我试着寻找答案,但我没有找到任何类似我的问题。我是Xamarin的新手(不是C#),所以我可能不知道正确的术语。
为了保持可读性,我创建了一个新项目,它有完全相同的bug。
这个问题很容易重现:创建一个新的Xamarin.Android项目(使用包含菜单、FAB等的模板)
然后我在content_main.xml中添加了一个NumberPicker:

<?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; // in actual app this is inside the model
 
        protected override void OnCreate(Bundle savedInstanceState)
        {
            // default code...
 
            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;
            });
        }
 
        // default code...
}


然后,当在模拟设备或真实的设备上运行时,在单击Snackbar上的Action后,选取器仍停留在13上。当直接输入数字时似乎不会发生这种情况,但当旋转选择器到13时,它会在1-5次尝试之间卡住。它确实在来回移动后重置(例如。13->11; 11 -> 13 -> Snackbar再次显示,单击它,然后它确实重置)。

xxe27gdn

xxe27gdn1#

我已经创建了一个新的项目来测试您提供的代码。当我快速滚动数字选择器时,我可以重现您的问题。
但问题并不是每次都出现。只有当我快速滚动到值13并快速单击操作时,它才会出现。
我已经检查了我昨天使用的代码,如果我删除了m_picker.WrapSelectorWheel = false;,这个问题就永远不会出现。此外,我还在android studio的原生android项目中尝试了你的代码,也遇到了同样的问题。
所以你可以在谷歌开发者社区发布一个新的问题。

相关问题