我正在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再次显示,单击它,然后它确实重置)。
1条答案
按热度按时间xxe27gdn1#
我已经创建了一个新的项目来测试您提供的代码。当我快速滚动数字选择器时,我可以重现您的问题。
但问题并不是每次都出现。只有当我快速滚动到值13并快速单击操作时,它才会出现。
我已经检查了我昨天使用的代码,如果我删除了
m_picker.WrapSelectorWheel = false;
,这个问题就永远不会出现。此外,我还在android studio的原生android项目中尝试了你的代码,也遇到了同样的问题。所以你可以在谷歌开发者社区发布一个新的问题。