如何将DatePickerDialog的值设置到EditText中?

4

我希望将DatePickerDialog的值设置到EditText中,使用(sdf.format(myCalendar.getTime()));。我已经尝试了这种方法,但没有成功。应该如何修复呢?

以下是我的代码:

Calendar myCalendar;
DatePickerDialog.OnDateSetListener date;

private int pYear;
private int pMonth;
private int pDay;
static final int DATE_DIALOG_ID = 0;

myCalendar = Calendar.getInstance();
pYear = myCalendar.get(Calendar.YEAR);
pMonth = myCalendar.get(Calendar.MONTH);
pDay = myCalendar.get(Calendar.DAY_OF_MONTH);

dobET.setOnClickListener(new OnClickListener() {
    @Override
    public void onClick(View v) {
        // TODO Auto-generated method stub
        showDialog(DATE_DIALOG_ID);
    }
});

public Dialog onCreateDialog(int id) {
    switch (id) {
    case DATE_DIALOG_ID:
        date = new DatePickerDialog.OnDateSetListener() {
            public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
                pYear = year;
                pMonth = monthOfYear;
                pDay = dayOfMonth;

                updateLabel();
            }
        };
        DatePickerDialog dialog = new DatePickerDialog(this, date, pYear, pMonth, pDay);
        dialog.getDatePicker().setMaxDate(new Date().getTime());
        return dialog;
    }
    return null;
}

private void updateLabel() {
    String myFormat = "MM-dd-yyyy"; // In which you need put here
    SimpleDateFormat sdf = new SimpleDateFormat(myFormat, Locale.US);

    String myFormat2 = "yyyy-MM-dd"; // In which you need put here
    SimpleDateFormat sdf2 = new SimpleDateFormat(myFormat2, Locale.US);
    dateToSave = sdf2.format(myCalendar.getTime());
    saveDOBPrefEditor.putString("DOB", dateToSave);
    saveDOBPrefEditor.commit();

    dobET.setText(sdf.format(myCalendar.getTime()));
}

你在 onDateSet() 中更新了 pBlaBla,但是在 updateLabel() 中使用了 myCalendar。请更新其中一个变量,并在 updateLabel() 中使用它们。 - Andrew T.
你能写这段代码吗?我被搞糊涂了。 - Aparana
@user3876078 请尝试我的答案,如果不行,请告诉我,我会为您进行编辑。 - Umair
showDialog(DATE_DIALOG_ID); 方法已经过时。您应该使用 DatePickerDialogFragment - Piyush
@AndrewT. 你能写一个 updateLabel() 函数的代码吗? - Aparana
1
我还没有测试过你的代码,但如果我理解代码应该做什么,那么我的答案和Darkie是一样的,老实说。编辑:我只会修改你的onDateSet() - Andrew T.
4个回答

1
calendar = Calendar.getInstance();
        day = calendar.get(Calendar.DAY_OF_MONTH);
        month = calendar.get(Calendar.MONTH);
        year = calendar.get(Calendar.YEAR);     

date.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                date.setCursorVisible(false);
                datePickerDialog = new DatePickerDialog(CityList.this,
                        new OnDateSetListener() {

                            @Override
                            public void onDateSet(DatePicker view, int year1,
                                    int monthOfYear, int dayOfMonth) {
                                // TODO Auto-generated method stub

                                year = year1;
                                month = monthOfYear;
                                day = dayOfMonth;
                                datePickerDialog.updateDate(year, monthOfYear,
                                        dayOfMonth);
                                date.setText((month + 1) + "/" + day + "/"
                                        + year);
                            }

                        }, year, month, day);

                //
                datePickerDialog.setTitle("Select Date");
                datePickerDialog.show();
            }

        });

1

试试这个

DatePickerDialog dialog = null;
Calendar myCalendar = Calendar.getInstance();
dobET.setKeyListener(null);

DatePickerDialog.OnDateSetListener date = new DatePickerDialog.OnDateSetListener() 
{
    @Override
    public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth)
    {
        myCalendar.set(Calendar.YEAR, year);
        myCalendar.set(Calendar.MONTH, monthOfYear);
        myCalendar.set(Calendar.DAY_OF_MONTH, dayOfMonth);
        updateLabel();
    }
};

dobET.setOnClickListener(new View.OnClickListener() 
    {           
        @Override
        public void onClick(View v) 
        {
            InputMethodManager keyboard = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
            keyboard.hideSoftInputFromWindow(dobET.getWindowToken(), 0);

            if(!dialog.isShowing()) {
                dialog.show();
            }
            Log.d(TAG, "Click Listener fired");
        }
    });

    dobET.setOnFocusChangeListener(new OnFocusChangeListener() {

        @Override
        public void onFocusChange(View arg0, boolean hasFocus) {
            InputMethodManager keyboard = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
            keyboard.hideSoftInputFromWindow(
                    dobET.getWindowToken(), 0);

            if(hasFocus && !(dialog.isShowing())) {
                dialog.show();
            }

            Log.d(TAG, "Focus Listener " + hasFocus);
        }
    });

dialog = new DatePickerDialog(MainActivity.this, date, myCalendar.get(Calendar.YEAR), myCalendar.get(Calendar.MONTH),
            myCalendar.get(Calendar.DAY_OF_MONTH));
private void updateLabel() 
{
    String myFormat = "MM/dd/yy"; //In which you need put here
    SimpleDateFormat sdf = new SimpleDateFormat(myFormat, Locale.US);

    dobET.setText(sdf.format(myCalendar.getTime()));
}

希望这有所帮助....

我已经尝试过这段代码,但它没有更新编辑文本。 - Aparana
我的问题是如何使用日期选择器的值来更新编辑框。 - Aparana
@user3876078 日期选择器将获取当前日期...您想从日期选择器中获取什么值? - Umair
在dobET.setOnClickListener点击事件中,我设置在日期选择器对话框中的值。 - Aparana
1
因为我已经使用dialog.getDatePicker().setMaxDate(new Date().getTime());将当前日期设置为最大日期,并且此属性仅适用于蜂巢及以上版本。 - Aparana
显示剩余4条评论

0
你可以使用 TextView 代替 EditText,并通过点击 DatePicker 按钮来更改日期。
public class ProfileDetailActivity extends ActionBarActivity {

  ImageButton birthdate_selector;
  TextView user_birth_date;
  Context mContext;
  Calendar calendar;
  SimpleDateFormat format;

  @Override
  protected void onCreate(Bundle savedInstanceState) {
     super.onCreate(savedInstanceState);
     mContext = ProfileDetailActivity.this;
     setContentView(R.layout.fragment_profile_edit);
     birthdate_selector = (ImageButton) findViewById(R.id.birthdate_selector);
     user_birth_date = (TextView) findViewById(R.id.user_birth_date);

     birthdate_selector.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            DialogFragment newFragment = new DatePickerFragment();
            newFragment.show(getSupportFragmentManager(), "datePicker");
        }
     });

 }

 @SuppressLint({ "ValidFragment", "SimpleDateFormat" })
 public class DatePickerFragment extends DialogFragment implements DatePickerDialog.OnDateSetListener {

    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        int monthInt = 0, year = 0, month = 0, day = 0;
        String[] separated = intent.getStringExtra("birth_date").split(" ");
        calendar = Calendar.getInstance();
        try {
                calendar.setTime(new SimpleDateFormat("MMM").parse(separated[1]));
                monthInt = calendar.get(Calendar.MONTH);
                year = Integer.parseInt(separated[3]);
                month = monthInt;
                day = Integer.parseInt(separated[0]);
            } catch (Exception e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            if (Config.isDebugEnabled) {
                  Log.e("Date in set:", "day: " + day + " month : " + month + " year: " + year);
            }
            // Create a new instance of DatePickerDialog and return it
            return new DatePickerDialog(getActivity(), this, year, month, day);
    }

    @Override
    public void onDateSet(DatePicker view, int year, int month, int day) {
        final Calendar c = Calendar.getInstance();
        int yy = c.get(Calendar.YEAR);
        int mm = c.get(Calendar.MONTH);
        int dd = c.get(Calendar.DAY_OF_MONTH);
        format = new SimpleDateFormat("yyyy-MM-dd");
        java.util.Date date1 = null;
        java.util.Date date2 = null;
        try {
                date1 = format.parse(year + "-" + (month + 1) + "-" + day);
                date2 = format.parse(yy + "-" + mm + "-" + dd);
            } catch (ParseException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            int diffInDays = (int) ((date2.getTime() - date1.getTime()) / (1000 * 60 * 60 * 24));
            int diffInYears = diffInDays / 365;
            if (type.equals("parent")) {
                    if (diffInYears < 15) {
                            user_birth_date.setError("Please enter valid birthdate .");
                            user_birth_date.setText(null);
                    } else {
                            format = new SimpleDateFormat("d");
                            calendar = new GregorianCalendar(year, month, day);
                            format = new SimpleDateFormat("d MMM , yyyy");
                            view_date = format.format(calendar.getTime());
                            // view_date = year+"-"+(month+1)+"-"+day;
                            user_birth_date.setText(view_date);
                    }
            }
            if (type.equals("student")) {
                    if (diffInYears < 3) {
                            user_birth_date.setError("Please enter valid birthdate .");
                            user_birth_date.setText(null);
                    } else {
                            format = new SimpleDateFormat("d");
                            calendar = new GregorianCalendar(year, month, day);
                            format = new SimpleDateFormat("d MMM , yyyy");
                            view_date = format.format(calendar.getTime());
                            // view_date = year+"-"+(month+1)+"-"+day;
                            user_birth_date.setText(view_date);
                    }
            }
      }
   }
 }

0

尝试这个序列:

在Xml中

<EditText
      android:id="@+id/etDate"
      android:layout_width="match_parent"
      android:layout_height="wrap_content"
      android:layout_marginTop="2dp"
      android:inputType="number"
      android:onClick="showDatePickerDialog" //on click of this edittext showDatePickerDialog below method will be called
      android:textSize="12dp" />

在Activity类中

EditText etDate = (EditText) findViewById(R.id.etDate);

public void showDatePickerDialog(View v) {
        DialogFragment newFragment = new DatePickerFragment();
        newFragment.show(getFragmentManager(), "datePicker");
    }

private class DatePickerFragment extends DialogFragment implements OnDateSetListener 
    {
        @Override
        public Dialog onCreateDialog(Bundle savedInstanceState) 
        {
            final Calendar c = Calendar.getInstance();

            int year = c.get(Calendar.YEAR);
            int month = c.get(Calendar.MONTH);
            int day = c.get(Calendar.DAY_OF_MONTH);

            return new DatePickerDialog(getActivity(), this, year, month, day);
        }

        public void onDateSet(DatePicker view, int year, int month, int day) 
        {
            etDate.setText("" + day + "/" + (month + 1) + "/" + year);
        }
    }   

完成啦 :)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接