Android Date Picker Fragment 不能设置为自定义日期
Posted
技术标签:
【中文标题】Android Date Picker Fragment 不能设置为自定义日期【英文标题】:Android Date Picker Fragment can not be set to Custom date 【发布时间】:2018-10-05 12:27:08 【问题描述】:在“图像按钮”上的“onClickListner”中,我的自定义“DatePickerFragment”正在显示以选择日期。以下是
的代码DatePickerFragment.java
import android.app.DatePickerDialog;
import android.app.Dialog;
import android.os.Bundle;
import android.support.v4.app.DialogFragment;
import android.util.Log;
import android.widget.DatePicker;
import java.util.Calendar;
/**
* Created by Admin on 9/4/18.
*/
public class DatePickerFragment extends DialogFragment
implements DatePickerDialog.OnDateSetListener
private onDatePickerListener mListener;
private boolean future;
public DatePickerFragment()
// public DatePickerFragment(boolean future)
// this.future=future;
//
@Override
public Dialog onCreateDialog(Bundle savedInstanceState)
// Use the current date as the default date in the picker
final Calendar c = Calendar.getInstance();
int year = c.get(Calendar.YEAR);
int month = c.get(Calendar.MONTH);
Log.d("DATE_PICKER", " CURRENT_MONTH " + month);
int day = c.get(Calendar.DAY_OF_MONTH);
DatePickerDialog datePickerDialog = new DatePickerDialog(getActivity(), R.style.AppBaseTheme,this, year, month, day);
if(isFuture() ==false)
datePickerDialog.getDatePicker().setMaxDate(System.currentTimeMillis());
// Create a new instance of DatePickerDialog and return it
return datePickerDialog;
public void onDateSet(DatePicker view, int year, int month, int day)
// Do something with the date chosen by the user
callListener(year, month, day);
public DialogFragment setCallbackListener(onDatePickerListener listener)
mListener = listener;
return null;
private void callListener(int year, int month, int day)
if (mListener != null) mListener.onDataSet(year, month, day);
public boolean isFuture()
return future;
public void setFuture(boolean future)
this.future = future;
public interface onDatePickerListener
void onDataSet(int year, int month, int day);
然后,当单击“DatePickerFragment”中的“确定”按钮时,我在“MainActivity”中调用此“片段”以将日期设置为“EditText”。
MainActivity.java
import android.app.TimePickerDialog;
import android.content.Context;
import android.content.Intent;
import android.support.v4.app.DialogFragment;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.text.format.Time;
import android.util.Log;
import android.view.View;
import android.widget.EditText;
import com.sample.DatePickerFragment;
public class AddInterestedKarmaActivity extends AppCompatActivity
@Override
protected void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_add_interested_karma);
ButterKnife.bind(this);
context = this;
EditText dateEdittext = (Edittext)findViewById(R.id.date_edit);
setDate(dateEditText);
private void setDate(final EditText dateEditText)
datePickerFragment.setCallbackListener(new DatePickerFragment.onDatePickerListener()
@Override
public void onDataSet(int year, int month, int day)
int currentMonth = 0;
if (month == 0)
currentMonth = 1;
else if (month == 1)
currentMonth = 2;
else if (month == 2)
currentMonth = 3;
else if (month == 3)
currentMonth = 4;
else if (month == 4)
currentMonth = 5;
else if (month == 5)
currentMonth = 6;
else if (month == 6)
currentMonth = 7;
else if (month == 7)
currentMonth = 8;
else if (month == 8)
currentMonth = 9;
else if (month == 9)
currentMonth = 10;
else if (month == 10)
currentMonth = 11;
else if (month == 11)
currentMonth = 12;
else if (month == 12)
dateEditText.setText(day + "/" + currentMonth + "/" + year);
);
DialogFragment datePicker = datePickerFragment;
datePicker.show(getSupportFragmentManager(), "datePicker");
private void setTime(final EditText timeEditText)
final Calendar c = Calendar.getInstance();
mHour = c.get(Calendar.HOUR_OF_DAY);
mMinute = c.get(Calendar.MINUTE);
TimePickerDialog timePickerDialog = new TimePickerDialog(context,
new TimePickerDialog.OnTimeSetListener()
@Override
public void onTimeSet(TimePicker view, int hourOfDay,
int minute)
String curTime = String.format("%02d:%02d", hourOfDay, minute);
timeEditText.setText(curTime);
, mHour, mMinute, false);
timePickerDialog.show();
我需要将“DatePickerFragmenet”的日期设置为自定义日期(不是今天)。例如将 'DatePickerFragment' onCreate() 设置为上述来自 'dateEditText' 的最终 int y、m、d 值。而且我还需要将自定义“时间”设置为“TimePickerDialog”,例如“DatePickerFragment”。
【问题讨论】:
您好心好几个月来写这些条件。我感谢你的努力。但是您可以简单地将 1 添加到month
。
@Amrish Kakadiya,我需要在第二次在屏幕上显示 DatePickerFragment 时的 EditText.getText().toString() 值。
【参考方案1】:
DatePickerDialog
中有一个函数可以设置自定义日期(updateDate(year_, month_, day_)
)
根据您的代码,您需要在DatePickerFragment
中进行更改
在onCreateDialog
的DatePickerFragment
中,您从日历中获取date
、month
和year
,而不是从Calendar
获取,提供您的自定义日期。
更新的类在下面
public class DatePickerFragment extends DialogFragment
implements DatePickerDialog.OnDateSetListener
private onDatePickerListener mListener;
private boolean future;
int day_;
int month_;
int year_;
private DatePickerDialog datePickerDialog;
public DatePickerFragment()
@Override
public Dialog onCreateDialog(Bundle savedInstanceState)
// Use the current date as the default date in the picker
// final Calendar c = Calendar.getInstance();
// int year = c.get(Calendar.YEAR);
// int month = c.get(Calendar.MONTH);
// Log.d("DATE_PICKER", " CURRENT_MONTH " + month);
// int day = c.get(Calendar.DAY_OF_MONTH);
datePickerDialog = new DatePickerDialog(getActivity(), R.style.AppTheme, this, year_, month_, day_);
if (isFuture() == false)
datePickerDialog.getDatePicker().setMaxDate(System.currentTimeMillis());
// datePickerDialog.updateDate(year_, month_, day_);
// Create a new instance of DatePickerDialog and return it
return datePickerDialog;
public void onDateSet(DatePicker view, int year, int month, int day)
// Do something with the date chosen by the user
callListener(year, month, day);
public DialogFragment setCallbackListener(onDatePickerListener listener)
mListener = listener;
return null;
private void callListener(int year, int month, int day)
if (mListener != null) mListener.onDataSet(year, month, day);
public boolean isFuture()
return future;
public void setFuture(boolean future)
this.future = future;
public interface onDatePickerListener
void onDataSet(int year, int month, int day);
在您的活动中,您需要提供自定义日期。 更新活动如下,您可以添加您的自定义日期。
public class AddInterestedKarmaActivity extends AppCompatActivity
DatePickerFragment datePickerDialog;
EditText dateEdittext;
String customDate = "12/12/2007"; //dd/mm/yy
@Override
protected void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_add_interested_karma);
dateEdittext = (EditText) findViewById(R.id.date_edit);
// setDate(dateEditText);
datePickerDialog = new DatePickerFragment();
datePickerDialog.day_ = getDay();
datePickerDialog.month_ = getMonth();
datePickerDialog.year_ = getYear();
datePickerDialog.setCallbackListener(new DatePickerFragment.onDatePickerListener()
@Override
public void onDataSet(int year, int month, int day)
month = month + 1;
dateEdittext.setText(day + "/" + month + "/" + year);
);
datePickerDialog.show(getSupportFragmentManager(), "datePicker");
private int getYear()
return Integer.parseInt(changeDateFormat(customDate, "MM/dd/yyyy", "YYYY"));
private int getMonth()
return Integer.parseInt(changeDateFormat(customDate, "MM/dd/yyyy", "MM")) - 1; //substract one from month because month gets start from 0 in Calendar.
private int getDay()
return Integer.parseInt(changeDateFormat(customDate, "MM/dd/yyyy", "dd"));
public String changeDateFormat(String dateString, String sourceDateFormat, String targetDateFormat)
if (dateString == null || dateString.isEmpty())
return "";
SimpleDateFormat inputDateFromat = new SimpleDateFormat(sourceDateFormat, Locale.US);
Date date = new Date();
try
date = inputDateFromat.parse(dateString);
catch (ParseException e)
e.printStackTrace();
SimpleDateFormat outputDateFormat = new SimpleDateFormat(targetDateFormat, Locale.US);
return outputDateFormat.format(date);
【讨论】:
我做了更改,但在活动中 datePickerDialog.year_ = getYear 显示与月份和日期相同的错误。因此我无法设置日期。然后 datePickerDialog onCreate 不显示任何选择。 感谢您为我提供解决方案。主要是我需要将自定义日期设置为 datePickerDialog。因为我从数据库中检索日期并将其分配给 EditText。之后,我需要在 DatePickerDialog 上显示该日期。 datePickerDialog.day_ = getDay(); datePickerDialog.month_ = getMonth(); datePickerDialog.year_ = getYear();是显示错误的行。 在 AddInterestedKarmaActivity 中我采用了一个变量 customDate,您可以将数据库中的日期分配给该变量。关于您遇到的错误,getDay()、getMonth() 和 getYear() 是我在同一活动中创建的方法。您只需要复制这两个类并粘贴到您的代码中。如果仍然有任何错误,请告诉我对您有帮助。 其实是DatePickerFragment报错,因为没有初始化public int getDay_() return day_; 公共无效 setDay_(int day_) this.day_ = day_; public int getMonth_() 返回月份_; public void setMonth_(int month_) this.month_ = month_; public int getYear_() return year_; public void setYear_(int year_) this.year_ = year_;现在我纠正了这个问题,现在它工作得很好。非常感谢您的帮助。 您是否在 DatePickerFragment 片段中进行了上述更改?以上是关于Android Date Picker Fragment 不能设置为自定义日期的主要内容,如果未能解决你的问题,请参考以下文章
防止在 react-date-picker 中突出显示 Today
element-ui date-picker无法通过value绑值的取巧解决方案
ngChange 不适用于 kendo.toolbarOptions 中定义的 kendo-date-picker