Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/228.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从NumberPicker中选择一个值_Java_Android_Kotlin - Fatal编程技术网

Java 从NumberPicker中选择一个值

Java 从NumberPicker中选择一个值,java,android,kotlin,Java,Android,Kotlin,我正在尝试制作一个自定义的NumberPicker以显示在对话框片段中。到目前为止,我已经成功地让选择器显示在对话框片段中,并让它显示我希望它显示的自定义字符串。我还禁用了DegenantFocusability,因此文本不可编辑。以下是我对NumberPicker行为提出的问题的概述,我将在下面进行更深入的讨论: 如何“提交”他们的选择 如何返回所选值 如何“提交”他们的选择? 当对话框出现时,我看不到“选择”选项的清晰方式(见下图)。查看本机Android选择对话框,我经常看到单选按钮。

我正在尝试制作一个自定义的
NumberPicker
以显示在
对话框片段中。到目前为止,我已经成功地让选择器显示在对话框片段中,并让它显示我希望它显示的自定义字符串。我还禁用了DegenantFocusability,因此文本不可编辑。以下是我对NumberPicker行为提出的问题的概述,我将在下面进行更深入的讨论:

  • 如何“提交”他们的选择
  • 如何返回所选值
如何“提交”他们的选择?

当对话框出现时,我看不到“选择”选项的清晰方式(见下图)。查看本机Android选择对话框,我经常看到单选按钮。这是路吗?我是否使用了错误的UI组件来构建它

如何返回所选值?

这个问题与最后一个问题紧密相连,因为不知道如何提交选择显然在这里没有帮助。现在我使用
NumberPicker.OnValueChangeListener
查看值是否已更改,但它从未触发。下面是我如何构建代码的:

class PlatePickerFragment: DialogFragment() {
    lateinit var listener: NumberPicker.OnValueChangeListener
    //I set up the fragment with onCreateDialog here.
}
这是我创建实例时使用的代码:

val platePicker = PlatePickerFragment()
platePicker.listener = NumberPicker.OnValueChangeListener { numberPicker, i1, i2 -> 
    //set what to do on value change here.
}
但是,此块从未被调用

TL;DR:我是否使用了正确的UI组件?如果我是,我将如何以有效的方式实现这一点?为什么NumberPicker在默认情况下没有
cancel/ok
部分(请参见下面的日期选择器图像)?提前谢谢

对第一部分的回答:

这是实现NumberPicker的理想方法。你能做的一件事 在侧面添加一个OK按钮来捕捉选择。参见屏幕截图

相同的代码:

picker.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent">

    <RelativeLayout
        android:id="@+id/rl"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="#ffffff"
        android:padding="16dp">

        <TextView
            android:id="@+id/tv"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentEnd="true"
            android:layout_alignParentRight="true"
            android:padding="5dp"
            android:text="OK"
            android:textSize="15dp" />

        <NumberPicker
            android:id="@+id/numberPicker"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_below="@id/tv"
            android:layout_marginTop="10dp" />
    </RelativeLayout>

</LinearLayout>
值声明为全局变量

回答你问题的第二部分:

  int hour;
  numberPicker.setOnValueChangedListener(new NumberPicker.OnValueChangeListener() {
  @Override
  public void onValueChange(final NumberPicker numberPicker, final int i, final int i1) {
   hour = Integer.valueOf(numberPicker.getDisplayedValues()[numberPicker.getValue()]);

  }
});

单击“确定”按钮,您将在小时内得到答案。

谢谢您的时间。此答案没有显示如何使用图像中显示的按钮创建选择器视图,因此第一个问题仍然没有回答。@JillevdW现在检查,我已使用第一个图像的代码更新了答案感谢您对答案的澄清;现在我很清楚,为了获得想要的行为,我必须创建一个布局,包括我想要的按钮和其他功能。OnValueChangeListener还没有为我开火,但我找到了解决问题的方法。嗨,JillevdW,如果这个或任何答案都解决了你的问题,请考虑通过点击复选标记来接受它。这向更广泛的社区表明,你已经找到了一个解决方案,并给回答者和你自己带来了一些声誉。没有义务这样做。如果没有义务这样做,请停止每10分钟留下完全相同的评论。谢谢你的意见,但这个答案并不是我解决问题的方式,我正在等待其他人留下补充答案。如果没有,我会写一个关于如何解决问题的答案。
  int hour;
  numberPicker.setOnValueChangedListener(new NumberPicker.OnValueChangeListener() {
  @Override
  public void onValueChange(final NumberPicker numberPicker, final int i, final int i1) {
   hour = Integer.valueOf(numberPicker.getDisplayedValues()[numberPicker.getValue()]);

  }
});