从NumberPicker中选择一个值

时间:2018-04-05 08:57:55

标签: java android kotlin

我尝试将自定义var tableFaculty = $('#tableFaculty').DataTable({ "columns": [ { data: function (row, type, set) { return ''; } }, {data: "NAME"} ], "columnDefs": [ { orderable: false, className: 'select-checkbox', targets: 0 } ], select: { style: 'multi', selector: 'td:first-child' }, dom: 'Bfrtip', buttons: [ 'selectAll', 'selectNone' ], "order": [[0, 'desc']] }); 显示在NumberPicker中。到目前为止,我已经成功地将选择器显示在对话框片段中并让它显示我想要的自定义字符串。我还禁用了descendantFocusability,因此文本不可编辑。以下是我对NumberPicker行为的问题的概述,我将在以后更深入地介绍:

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

如何提交'他们的选择?

当对话框出现时,我看不清楚如何选择'一个选项(见下图)。查看原生Android选择对话框,我经常看到radiobuttons。这是要走的路吗?我是否使用错误的UI组件来构建它?

The current state of my PickerView.

如何返回所选值?

这个问题与最后一个问题紧密相关,因为不知道如何提交选择显然在这里没有帮助。现在我使用DialogFragment来查看值是否已更改,但它永远不会触发。以下是我构建代码的方式:

NumberPicker.OnValueChangeListener

这是我在创建实例时使用的代码:

class PlatePickerFragment: DialogFragment() {
    lateinit var listener: NumberPicker.OnValueChangeListener
    //I set up the fragment with onCreateDialog here.
}

但是,这个块永远不会被调用。

TL; DR:我使用的是正确的UI组件吗?如果我是,我将如何实现它的工作方式?为什么NumberPicker默认没有val platePicker = PlatePickerFragment() platePicker.listener = NumberPicker.OnValueChangeListener { numberPicker, i1, i2 -> //set what to do on value change here. } 部分(参见下面的DatePicker图片)?提前谢谢!

'Cancel' and 'Ok' buttons on a DatePicker.

1 个答案:

答案 0 :(得分:1)

回答第一部分:

这是实现NumberPicker的理想方式。你可以做的一件事 在旁边添加一个OK按钮以捕捉选择。参见截图

enter image description here

代码相同:

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>

在您的活动中:

 final NumberPicker aNumberPicker = (NumberPicker) dialog.findViewById(R.id.numberPicker);
    aNumberPicker.setMaxValue(12);
    aNumberPicker.setMinValue(1);
    aNumberPicker.setValue(1);
    aNumberPicker.setFocusable(true);
    aNumberPicker.setFocusableInTouchMode(true);
    aNumberPicker.setOnScrollListener(new NumberPicker.OnScrollListener() {
      @Override
      public void onScrollStateChange(NumberPicker view, int scrollState) {
        value = view.getValue();
      }
    });
    aNumberPicker.setOnValueChangedListener(new NumberPicker.OnValueChangeListener() {
      @Override
      public void onValueChange(NumberPicker picker, int oldVal, int newVal) {
        value = newVal;
      }
    });
TextView ok = (TextView) parent.findViewById(R.id.tv);
ok.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
              // value variable can be used here
            }
        });

声明为全局变量。

回答你问题的第二部分:

  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()]);

  }
});

点击“确定”按钮,您将在小时变量中回答。