android - 检索自定义日期和时间的优雅解决方案?

标签 android

我目前正在使用日期和时间选择器来检索用户提交的日期和时间,然后我将控件的文本设置为所选的日期和时间。

我正在使用以下代码:

new DatePickerDialog(newlog3.this, d, calDT.get(Calendar.YEAR), calDT.get(Calendar.MONTH), calDT.get(Calendar.DAY_OF_MONTH)).show();

new TimePickerDialog(newlog3.this, t, calDT.get(Calendar.HOUR_OF_DAY), calDT.get(Calendar.MINUTE), true).show();

optCustom.setText(fmtDT.format(calDT.getTime())); 

现在,虽然上面的代码块确实显示了日期和时间小部件并设置了文本,但在用户可以选择日期之前,代码块正在完全执行。即:它首先显示日期框,然后是时间框,然后更新文本,所有这些都没有任何用户交互。我希望日期小部件等待执行时间选择器,直到日期选择完成,并且我希望 settext 仅在时间小部件完成后执行。

这怎么可能?还是有更优雅的解决方案让我逃避?

编辑:这是位于类中的 DatePickerDialog/TimePickerDialog 的代码:

 DatePickerDialog.OnDateSetListener d=new DatePickerDialog.OnDateSetListener() { 
        public void onDateSet(DatePicker view, int year, int monthOfYear, 
                    int dayOfMonth) { 
            calDT.set(Calendar.YEAR, year); 
            calDT.set(Calendar.MONTH, monthOfYear); 
            calDT.set(Calendar.DAY_OF_MONTH, dayOfMonth); 
          //updateLabel(); 
        } 
      };   
 TimePickerDialog.OnTimeSetListener t=new TimePickerDialog.OnTimeSetListener() { 
        public void onTimeSet(TimePicker view, int hourOfDay, 
                             int minute) { 
            calDT.set(Calendar.HOUR_OF_DAY, hourOfDay); 
            calDT.set(Calendar.MINUTE, minute); 
          //updateLabel(); 
        } 
      };  

提前致谢

最佳答案

DatePickerDialog 关闭时收听 DatePickerDialog.OnDateSetListener .当调用 onDateSet(...) 时显示下一个对话框 (TimePickerDialog)。

编辑:我已经粘贴了您要求的代码

public class YourActivity extends Activity {    

private final Calendar selectedDate = Calendar.getInstance();

final DatePickerDialog.OnDateSetListener dateListener = new DatePickerDialog.OnDateSetListener() { 
        public void onDateSet(DatePicker view, int year, int monthOfYear,  int dayOfMonth) { 
            selectedDate.set(Calendar.YEAR, year);
            selectedDate.set(Calendar.MONTH, monthOfYear);
            selectedDate.set(Calendar.DAY_OF_MONTH, dayOfMonth);
            new TimePickerDialog(YourActivity.this, timeListener, 0, 0, true).show();
        } 
      };   

final TimePickerDialog.OnTimeSetListener timeListener = new TimePickerDialog.OnTimeSetListener() { 
        public void onTimeSet(TimePicker view, int hourOfDay,  int minute) { 
            selectedDate.set(Calendar.HOUR_OF_DAY, hourOfDay);
            selectedDate.set(Calendar.MINUTE, minute);              
            // push flow to the next step
        } 
      }; 

public void startTimeWizard() {
    final Calendar calendar = Calendar.getInstance();
    calendar.setTimeInMillis(System.currentTimeMillis());       
    new DatePickerDialog(this, dateListener, calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH), calendar.get(Calendar.DAY_OF_MONTH)).show();    
}

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);         
    setContentView(R.layout.main);
    startTimeWizard();
}

关于android - 检索自定义日期和时间的优雅解决方案?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2919889/

相关文章:

java - 如何允许 Sprite 只从一侧移动到另一侧?

android - 清除 WebView 创建的所有缓存项?

javascript - 抽屉菜单在 react native 中不起作用

android - 如何在不终止它启动的服务的情况下终止我的应用程序(调试)

android - 屏幕变暗但对话框不显示

java - 文件解密时 JPEG 字节加密返回错误图像

android - 在 Android 2.3.3 中以 sleep /待机模式播放音乐

android - Xamarin MasterDetailPage 看起来很难看

android - 开发适用于 Android 和桌面的 Air (Flex) 应用程序

android - ViewPagerExtension 示例 Android github