如何实现一个常见的android datepicker小部件,最好是在小部件包中,用于我的应用程序中的多个布局。所选日期的值将作为String变量传递,以保存在数据库中。我不想在为具有DatePicker的布局提供服务的每个活动中使用以下代码。
public class MainActivity extends Activity implements OnClickListener {
//UI References
private EditText etxtDate;
private DatePickerDialog datePickerDailog;
private SimpleDateFormat dateFormatter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
dateFormatter = new SimpleDateFormat("dd-MM-yyyy", Locale.US);
findViewsById();
setDateTimeField();
}
private void findViewsById() {
fromDateEtxt = (EditText) findViewById(R.id.etxt_fromdate);
fromDateEtxt.setInputType(InputType.TYPE_NULL);
fromDateEtxt.requestFocus();
}
private void setDateTimeField() {
etxt.setOnClickListener(this);
Calendar newCalendar = Calendar.getInstance();
datePickerDialog = new DatePickerDialog(this, new OnDateSetListener() {
public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
Calendar newDate = Calendar.getInstance();
newDate.set(year, monthOfYear, dayOfMonth);
fromDateEtxt.setText(dateFormatter.format(newDate.getTime()));
}
},newCalendar.get(Calendar.YEAR), newCalendar.get(Calendar.MONTH), newCalendar.get(Calendar.DAY_OF_MONTH));
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
@Override
public void onClick(View view) {
if(view == etxtDate) {
fromDatePickerDialog.show();
}
}
}
答案 0 :(得分:1)
为日期选择器对话框创建此类
public class DatePickerFragment extends DialogFragment {
OnDateSetListener dateSetListener;
private int year = 0;
private int month = 0;
private int day = 0;
public DatePickerFragment(OnDateSetListener dateSetListener) {
this.dateSetListener = dateSetListener;
// Use the current date as the default date in the picker
final Calendar c = Calendar.getInstance();
year = c.get(Calendar.YEAR);
month = c.get(Calendar.MONTH);
day = c.get(Calendar.DAY_OF_MONTH);
}
public DatePickerFragment(OnDateSetListener dateSetListener, String date) {
this.dateSetListener = dateSetListener;
// Use the Given date as the default date in the picker
int parsedDate[] = new int[3];
int itterator = 0;
for (String retval : date.split("/")) {
parsedDate[itterator] = Integer.parseInt(retval);
itterator++;
}
day = parsedDate[0];
month = parsedDate[1] - 1;
year = parsedDate[2];
}
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
// Create a new instance of DatePickerDialog and return it
return new DatePickerDialog(getActivity(), dateSetListener, year,
month, day);
}
创建此类的对象并调用您必须为您想要的每个活动或片段创建日期监听器
DatePickerDialog.OnDateSetListener dateSetListener = new DatePickerDialog.OnDateSetListener() {
@Override
public void onDateSet(DatePicker view, int year, int monthOfYear,
int dayOfMonth) {
//your action after the date is selected
}
};
然后使用你的监听器调用日期选择器
datePicker = new DatePickerFragment(fromDateSetListener);
或
datePicker = new DatePickerFragment(fromDateSetListener,date);
//date is the string which will be shown on the date picker dialog by default
现在调用日期选择器对话框
datePicker.show(getChildFragmentManager(), "datePicker");
答案 1 :(得分:0)
尝试:
这样您就可以在子活动中访问相同的代码了!