【问题标题】:Set date of datepickerdialog from EditText从 EditText 设置 datepickerdialog 的日期
【发布时间】:2013-11-11 14:29:55
【问题描述】:

我很惊讶,即使经过 1 小时的搜索,我也无法在网上找到它!

我有一个从原始 Pickers 示例稍微修改的日期选择器对话框(感谢 Raghunandan for this)。

但我不想将默认日期设置为当前日期,而是应该从 EditText 中选择日期并将该日期设置为 datepickerdialog。有人可以帮我解决这个问题吗?我当前的代码如下。

已编辑我需要知道如何从 DatePickerFragment 类中访问 EditText datepurchased 的值。

主要课程:

public class EditEntry extends Activity  implements DatePickerFragment.TheListener{
    EditText edit_datepurchased;
public void showdate(View v) {
        edit_datepurchased = (EditText) findViewById(v.getId());
        DialogFragment newFragment = new DatePickerFragment();
        newFragment.show(getFragmentManager(), "datePicker");
    }
public void returnDate(String date) {
        edit_datepurchased.setText(date);
    }
}

DatePickerFragment 类:

public class DatePickerFragment extends DialogFragment implements DatePickerDialog.OnDateSetListener {
    TheListener listener;

    public interface TheListener{
        public void returnDate(String date);
    }

    @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);
        listener = (TheListener) getActivity(); 
        return new DatePickerDialog(getActivity(), this, year, month, day);
    }

    public void onDateSet(DatePicker view, int year, int month, int day){
        Calendar c = Calendar.getInstance();
        c.set(year, month, day);

        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        String formattedDate = sdf.format(c.getTime());
        if (listener != null) 
        {
          listener.returnDate(formattedDate); 

        }
          //listener.returnDate(year+"-"+(month+1)+"-"+day);
    }
}

n.b.:我有一个问题here on same code before,但我不知道如何在旧线程中添加问题。

【问题讨论】:

    标签: android datepickerdialog


    【解决方案1】:

    使用SimpleDateFormat 可以将edittext 中的日期转换为毫秒。

    示例:

    DateFormat df = new SimpleDateFormat("MM/dd/yyyy",Locale.US);
    

    您需要根据显示方式调整格式,但之后只需使用 DateFormat 对象中的 parse 方法

    Date d = df.parse(dateString);
    

    然后创建一个Calendar 对象并设置日期

    Calendar calendar = Calendar.getInstance();
    calendar.setDate(d);
    

    编辑:

    要从EditText 发送文本,您需要在创建对话框片段时发送捆绑包中的字符串

    示例:

    DialogFragment newFragment = new DatePickerFragment();
    Bundle bundle = new Bundle();
    bundle.putString("dateAsText",edit_datepurchased.getText().toString());
    newFragment.setArguments(bundle); 
    newFragment.show(getFragmentManager(), "datePicker");
    

    然后在您的对话片段中使用getArguments() 获取捆绑包

    Bundle bundle = getArguments();
    String date = bundle.getString("dateAsText");
    

    【讨论】:

    • 谢谢你,但我主要被困在如何在 DatePickerFragment 类中获取 EditText datepurchased 的值...“EditText a = (EditText) findViewById(R.id.datepurchased);”给出错误(方法 findViewById(int) 未定义 DatePickerFragment 类型)
    • 您不需要,您必须在创建片段时将其发送到Bundle。查看我的编辑
    • 抱歉延迟回答,非常感谢这个完美的解决方案......如果你帮忙解决另一件事..calendar.setDate(d) 无法识别,告诉方法 setDate(Date)未定义类型 Calendar ...
    • 抱歉,它的setTime 没有设置日期
    • 你需要用 try/catch 包围它
    【解决方案2】:

    希望对你有帮助:

    public class DatePickerFragment extends DialogFragment
    {
        private OnDateSetListener onDateSetListener;
    
        public DatePickerFragment() {}
    
        public void setOnDateSetListener(OnDateSetListener onDateSetListener) {
            this.onDateSetListener = onDateSetListener;
        }
    
        @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);
            int day = c.get(Calendar.DAY_OF_MONTH);
    
            // Create a new instance of DatePickerDialog and return it
            return new DatePickerDialog(getActivity(), onDateSetListener, year, month, day);
        }
    
    }
    

    【讨论】:

    • 所以你投票反对我来宣传你的答案。这种行为是不恰当的。
    • 我对你投了反对票,因为你的答案没有回答他的问题,只是复制了他已经知道的内容,几乎没有解释为什么你的答案是正确的
    【解决方案3】:

    "最终日历 c=Calendar.getInstance();" ,此代码将“c”设置为当前时间,修改为您想要的时间。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-07
      • 1970-01-01
      • 2016-01-08
      相关资源
      最近更新 更多