0

我想实现一个选择时间并返回它的方法,比如

public static int pickTime(Context context, int minuteOfDay) {
    final int[] result = {-1};
    final OnTimeSetListener listener = new OnTimeSetListener() {
        @Override
        public void onTimeSet(TimePicker timePicker, int hourOfDay, int minute) {
            result[0] = 60*hourOfDay + minute;
        }
    };
    new MyTimePickerDialog(context, listener, minuteOfDay/60, minuteOfDay%60, false).show();
    return result[0];
}

只是发现对话框立即返回,因此我的方法总是返回-1。

这是我可以忍受的事情,但是,我很好奇这样的事情是否可能。我不在乎应用程序在等待输入时是否工作,因为TimePicker无论如何它几乎占据了整个屏幕。

请注意,标准解决方案对我有用,但我认为这是一个很好的练习,可以更好地理解系统。

4

1 回答 1

0

从另一个线程很容易实现,只需等待对话框关闭即可。从主线程等待不起作用,因为它阻塞了事件处理。因此,我必须自己运行事件循环,而不是等待,这可能很复杂,甚至是不可能的。

可以做的是传递一个TextView应该设置的。但是,我总是需要做更多的事情,所以这没什么用。我最终得到了一个可以按如下方式使用的类(调用构造函数完成整个工作):

new MyTimePickerCallback(context, oldMinutes) {
    @Override
    public void onResult(int newMinutes) {
        ... do whatever you want
    }
};
于 2012-09-21T23:40:11.313 回答