我已经实现了android DatepickerDialog。当用户单击EditText时会触发DatepickerDialog。
我的布局代码示例
<EditText
android:id="@+id/etDate1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:focusable="false"
android:inputType="date"
android:ems="10"
android:hint="+ Add Date"
android:onClick="selectDate" />
以下是用于使DatepickerDialog工作的代码。
public void selectDate(View view) {
DialogFragment newFragment = new SelectDateFragment();
newFragment.show(getSupportFragmentManager(), "DatePicker");
}
public void populateSetDate(int year, int month, int day) {
etDate1 = (EditText) findViewById(R.id.etDate1);
etDate1.setText(month+"/"+day+"/"+year);
etDate2 = (EditText) findViewById(R.id.etDate2);
etDate2.setText(month+"/"+day+"/"+year);
}
public class SelectDateFragment extends DialogFragment implements DatePickerDialog.OnDateSetListener {
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
final Calendar calendar = Calendar.getInstance();
int yy = calendar.get(Calendar.YEAR);
int mm = calendar.get(Calendar.MONTH);
int dd = calendar.get(Calendar.DAY_OF_MONTH);
return new DatePickerDialog(getActivity(), this, yy, mm, dd);
}
public void onDateSet(DatePicker view, int yy, int mm, int dd) {
populateSetDate(yy, mm+1, dd);
}
}
现在的问题是,当我单击其中一个EditText时,DatePicker将会出现,当我从datepicker中选择一个特定日期时,它将被应用于上面显示的两个EditTexts。我需要它只有一个。如果有人能为我提供解决方案,那就太好了。
答案 0 :(得分:2)
按如下方式更新您的代码:
public void selectDate(View view) {
DialogFragment newFragment = new SelectDateFragment(view.getId());
newFragment.show(getSupportFragmentManager(), "DatePicker");
}
public void populateSetDate(int year, int month, int day, int viewId) {
etDate1 = (EditText) findViewById(viewId);
etDate1.setText(month+"/"+day+"/"+year);
}
public class SelectDateFragment extends DialogFragment implements DatePickerDialog.OnDateSetListener {
private final int viewId;
public SelectDateFragment(int viewId) {
this.viewId = viewId;
}
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
final Calendar calendar = Calendar.getInstance();
int yy = calendar.get(Calendar.YEAR);
int mm = calendar.get(Calendar.MONTH);
int dd = calendar.get(Calendar.DAY_OF_MONTH);
return new DatePickerDialog(getActivity(), this, yy, mm, dd);
}
public void onDateSet(DatePicker view, int yy, int mm, int dd) {
populateSetDate(yy, mm+1, dd, viewId);
}
}
说明:将被点击的视图的id
传递给对话框。选择日期后,将此id
传递回去,并填充正确的EditText
<{1}}
答案 1 :(得分:0)
考虑到您正在调用方法selectDate(View)onTouch或onClick的Edittext和传递的参数是Edittext,为您提供解决方案。
步骤#1:声明Edittext类型的类变量。 (用于保存已触摸的edittext的引用)
步骤2:在SelectDate(View)内的变量上方初始化。
步骤3:替换populateSetDate()中的代码块,并为在步骤1中声明的该类变量分配文本。
提一下,这不是Android相关的任务!!