Android 如何正确实现时间选择器

Android 如何正确实现时间选择器,android,timepicker,Android,Timepicker,我有一个需要显示计时器对话框的应用程序。我可以让时间选择器显示在应用程序上,但当我尝试连接侦听器时,似乎会抛出一个NPE。这是否正确实施 LayoutInflater li = LayoutInflater.from(NfcscannerActivity.this); View promptsView = li.inflate(R.layout.dialogboxmanuallogout, null); AlertDialog.Builder alertDialogBuilder = new

我有一个需要显示计时器对话框的应用程序。我可以让时间选择器显示在应用程序上,但当我尝试连接侦听器时,似乎会抛出一个NPE。这是否正确实施

LayoutInflater li = LayoutInflater.from(NfcscannerActivity.this);
View promptsView = li.inflate(R.layout.dialogboxmanuallogout, null);

AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(NfcscannerActivity.this);

// set prompts.xml to alertdialog builder
alertDialogBuilder.setView(promptsView);

//final EditText userInput = (EditText) promptsView
//.findViewById(R.id.editTextDialogUserInput);

final TimePicker tp = (TimePicker)findViewById(R.id.timepicker1);
tp.setOnTimeChangedListener(timeChangedListener);

// set dialog message
alertDialogBuilder
    .setCancelable(false)
    .setPositiveButton("OK",
        new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog,int id) {

                //Log.e(TAG, "about to get the hour from tp");
                //Integer hour = new Integer(1);
                //int hour = tp.getCurrentHour();
                //Log.e(TAG, "just got the hour from tp");
                //Integer minute = tp.getCurrentMinute();

                Toast.makeText(NfcscannerActivity.this,
                    "Last logout has been updated at "+ tp.getCurrentHour() + tp.getCurrentMinute() ,
                    Toast.LENGTH_LONG).show();

            }
        })
    .setNegativeButton("Cancel",
        new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog,int id) {
                dialog.cancel();
            }
        });

// create alert dialog
AlertDialog alertDialog = alertDialogBuilder.create();

// show it
alertDialog.show();



private TimePicker.OnTimeChangedListener timeChangedListener = new TimePicker.OnTimeChangedListener() {

    @Override
    public void onTimeChanged(TimePicker view, int hourOfDay, int minute) {
        // TODO Auto-generated method stub
        Log.e(TAG, "time changed!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!");
    }
};
[更新1]


您试图从活动的内容视图而不是对话框中查找视图

所以在
alertDialogBuilder.create()之后使用下面的代码

final TimePicker tp = (TimePicker)promptsView.findViewById(R.id.timepicker1);
tp.setOnTimeChangedListener(timeChangedListener);

您好,没有,tp.setOnTimeChangedListener(timeChangedListener)上仍然有一个NPE;你删除第一个电话了吗?如果您删除了第一个调用,那么发布布局xml对话框boxManualLogout在进行上述更改后,您是否也可以编辑您的原始代码?我已经测试了tp是否为null,它是否为null。嘿,这很有效!非常感谢!时间选择器1是promptsview的一部分。再次感谢!
final TimePicker tp = (TimePicker)promptsView.findViewById(R.id.timepicker1);
tp.setOnTimeChangedListener(timeChangedListener);