gpt4 book ai didi

java - 从 NumberPicker 中选择一个值

转载 作者:行者123 更新时间:2023-11-30 00:02:27 25 4
gpt4 key购买 nike

我正在尝试制作自定义 NumberPicker 以显示在 DialogFragment 中。到目前为止,我已经成功地让选择器显示在对话框 fragment 中并让它显示我想要的自定义字符串。我还禁用了 descendantFocusability,因此文本不可编辑。这是我对 NumberPicker 行为的问题的概述,之后我会更深入地讨论:

  • 如何“ promise ”他们的选择?
  • 如何返回选中的值?

如何“提交”他们的选择?

当对话框出现时,我没有看到“选择”选项的明确方法(见下图)。查看 native Android 选择对话框,我经常看到单选按钮。那是要走的路吗?我是否使用了错误的 UI 组件来构建它?

The current state of my PickerView.

如何返回选中的值?

这个问题与最后一个问题紧密相关,因为不知道如何提交选择显然对这里没有帮助。现在,我使用 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.
}

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

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

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

最佳答案

第一部分的答案:

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

enter image description here

相同的代码:

选择器.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>

在你的 Activity 中:

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

}
});

单击“确定”按钮后,您将在小时 变量中得到答案。

关于java - 从 NumberPicker 中选择一个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49668176/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com