Android在特定的EditText中更改日期

时间:2013-12-31 03:47:07

标签: android android-fragments onclicklistener

我已经实现了android DatepickerDialog。当用户单击EditText时会触发DatepickerDialog。

enter image description here

我的布局代码示例

<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。我需要它只有一个。如果有人能为我提供解决方案,那就太好了。

2 个答案:

答案 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相关的任务!!