我创建了一个预订酒店应用程序,它有 3 个 TextView 和 2 个用于选择日期的按钮。如果按钮单击它会显示一个日期,所选日期将显示到 2 个 TextView 。如何在第三个 TextView 中显示日期之间的日期? 这是我的代码(第三个 TextView 不显示为日期之间的日期)
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
dateFormatter = new SimpleDateFormat("dd-MM-yyyy", Locale.US);
tvDateResult = (TextView) findViewById(R.id.tv_dateresult);
res = findViewById(R.id.tv_dateresult1);
ress = findViewById(R.id.tv_dateresult2);
btDatePicker = (Button) findViewById(R.id.bt_datepicker);
date = findViewById(R.id.bt_datepicker1);
get = findViewById(R.id.getprice);
date.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
showDateDialog2();
}
});
btDatePicker.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
showDateDialog();
}
});
}
private void showDateDialog2() {
Calendar newCalendar = Calendar.getInstance();
datePickerDialog = new DatePickerDialog(this, new DatePickerDialog.OnDateSetListener() {
@Override
public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
Calendar newDate = Calendar.getInstance();
newDate.set(year, monthOfYear, dayOfMonth);
res.setText(dateFormatter.format(newDate.getTime()));
}
},newCalendar.get(Calendar.YEAR), newCalendar.get(Calendar.MONTH), newCalendar.get(Calendar.DAY_OF_MONTH));
datePickerDialog.show();
if(tvDateResult !=null || res !=null) {
try {
String a = tvDateResult.getText().toString();
String b = res.getText().toString();
Date aa = dateFormatter.parse(a);
Date bb = dateFormatter.parse(b);
long diff = bb.getTime() - aa.getTime() / 24 * 60 * 60 * 1000;
ress.setText((int) TimeUnit.DAYS.convert(diff, TimeUnit.MILLISECONDS));
} catch (ParseException e) {
e.printStackTrace();
}
}
}
private void showDateDialog(){
Calendar newCalendar = Calendar.getInstance();
datePickerDialog = new DatePickerDialog(this, new DatePickerDialog.OnDateSetListener() {
@Override
public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
Calendar newDate = Calendar.getInstance();
newDate.set(year, monthOfYear, dayOfMonth);
tvDateResult.setText(dateFormatter.format(newDate.getTime()));
}
},newCalendar.get(Calendar.YEAR), newCalendar.get(Calendar.MONTH), newCalendar.get(Calendar.DAY_OF_MONTH));
datePickerDialog.show();
}
最佳答案
声明 2 个全局变量:
日历 date1 = null,date2 = null;
在两个日期选择器的
onDateSet
方法中,将所选日期保存在全局变量中。
在第一个日期选择器的 onDateSet
中,
Calendar newDate = Calendar.getInstance();
date1 = newDate
updateTextView()
类似地,在第二个日期选择器的 onDateSet
中,
Calendar newDate = Calendar.getInstance();
date1 = newDate
updateTextView()
从两个
onDateSet
方法调用一个方法。private void updateTextView() { if(date1 != null && date2 != null) { tvDateResult .setText(dateFormatter.format(daysBetween(date1,date2))); } } public static long daysBetween(Calendar startDate, Calendar endDate) { // Make sure we don't change the parameter passed Calendar newStart = Calendar.getInstance(); newStart.setTimeInMillis(startDate.getTimeInMillis()); newStart.set(Calendar.HOUR_OF_DAY, 0); newStart.set(Calendar.MINUTE, 0); newStart.set(Calendar.SECOND, 0); newStart.set(Calendar.MILLISECOND, 0); Calendar newEnd = Calendar.getInstance(); newEnd.setTimeInMillis(endDate.getTimeInMillis()); newEnd.set(Calendar.HOUR_OF_DAY, 0); newEnd.set(Calendar.MINUTE, 0); newEnd.set(Calendar.SECOND, 0); newEnd.set(Calendar.MILLISECOND, 0); long end = newEnd.getTimeInMillis(); long start = newStart.getTimeInMillis(); return TimeUnit.MILLISECONDS.toDays(Math.abs(end - start)); }
关于java - 在另外两个textview获取值之后设置textview值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62436420/