2

即使经过 1 小时的搜索,我也无法在网上找到这个,我感到非常惊讶!

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

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

EDITED我需要知道如何从 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);
    }
}

注意:我之前对相同的代码有一个问题,但我不知道如何在旧线程中添加问题。

4

3 回答 3

7

使用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");
于 2013-11-11T15:02:38.887 回答
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);
    }

}
于 2013-11-11T14:39:52.247 回答
1

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

于 2013-11-11T15:52:17.123 回答