我想要一个
ListView
,我可以在其中单击单个项目。 TimePickerDialog
应该出现并让用户选择时间并确认他的选择。所以我为此使用了setButton(BUTTON_POSITIVE, ...)
。该对话框按预期打开,但如果我单击两个按钮中的任何一个,该对话框将直接关闭,不会留下任何消息,除了:
sendCancelIfRunning:isInProgress=falsecallback=android.view.ViewRootImpl$$ExternalSyntheticLambda17@a929e50
按钮单击
Log.d(TAG, "onClick: Confirmed")
永远不会被记录,调试器也永远不会进入 onClick()
的 TimePickerDialog
。
public class AddStopActivity extends Activity {
[...]
@Override
public void onCreate(Bundle savedInstanceState) {
[...]
ListView listView = findViewById(R.id.listview);
SearchView searchView = findViewById(R.id.addStopSearch);
arrayAdapter = new ArrayAdapter<>(getApplicationContext(), R.layout.medium_text_list_item, busStops);
listView.setAdapter(arrayAdapter);
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int pos, long id) {
final Calendar myCalender = Calendar.getInstance();
int hour = myCalender.get(Calendar.HOUR_OF_DAY);
int minute = myCalender.get(Calendar.MINUTE);
TimePickerDialog.OnTimeSetListener timeListener = (v, hourOfDay, minuteOfDay) -> {
if (view.isShown()) {
myCalender.set(Calendar.HOUR_OF_DAY, hourOfDay);
myCalender.set(Calendar.MINUTE, minuteOfDay);
}
};
TimePickerDialog timePickerDialog = new TimePickerDialog(AddStopActivity.this, android.R.style.Theme_Holo, timeListener, hour, minute, true);
timePickerDialog.setTitle(R.string.dialog_select_time);
timePickerDialog.getWindow().setBackgroundDrawableResource(android.R.color.transparent);
int width = (int)(getResources().getDisplayMetrics().widthPixels*0.40);
int height = (int)(getResources().getDisplayMetrics().heightPixels*0.40);
timePickerDialog.getWindow().setLayout(width, height);
timePickerDialog.setButton(BUTTON_POSITIVE, "Confirm", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Log.d(TAG, "onClick: Confirmed");
dialog.dismiss();
}
});
timePickerDialog.show();
}
});
[...]
}
我尝试记录和调试 ButtonClick,但没有显示任何关于要做什么的提示。我也尝试在
setButton()
之后打电话给show()
,但也没有任何反应。
您不必在设置按钮的行上执行此操作。
相反,请尝试在“OnTimeSetListener()”中单击“确认”按钮时执行您想要执行的操作。
//...
TimePickerDialog.OnTimeSetListener timeListener = (v, hourOfDay, minuteOfDay) -> {
if (view.isShown()) {
myCalender.set(Calendar.HOUR_OF_DAY, hourOfDay);
myCalender.set(Calendar.MINUTE, minuteOfDay);
}
Log.d(TAG, "Time selected: " + hourOfDay + ":" + minuteOfDay);
};
//...
timePickerDialog.setButton(BUTTON_POSITIVE, "Confirm", timePickerDialog);
//...
日志:
Time selected: 18:10