首页 文章

从Android中的DatePickerFragment获取Date对象

提问于
浏览
1

我在我的android应用程序中定义了DatePickerFragment,这里是代码:

public class DatePickerFragment extends DialogFragment implements
        DatePickerDialog.OnDateSetListener {

    private int year;
    private int month;
    private int day;


    @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(), this, year, month, day);

    }

    @Override
    public void onDateSet(DatePicker view, int year, int month, int day) {
        this.year = year;
        this.month = month;
        this.day = day;
    }

    public Date getDateFromDatePicker(){
        Calendar calendar = Calendar.getInstance();
        calendar.set(year, month, day);
        return calendar.getTime();
    }
}

我想从TaskFragment中从这个日期选择器中检索日期,并将我的类Task中的“date”属性设置为等于所选日期

// Method for date picker to appear once the "Due Date" button is clicked.
    datePickerButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            FragmentManager fm = getActivity().getFragmentManager();
            DatePickerFragment datePicker = new DatePickerFragment();
            datePicker.show(fm, "datePicker");

            task.setDate(datePicker.getDateFromDatePicker());
           //test
           System.out.println(task.getDate());


        }
    });

单击按钮时会出现日期选择器 . 但是,日期没有正确设置,并且在按下日期按钮时实际上正在设置日期,而不是从选择器中选择日期时 . 此外,在打印日期时,无论我选择哪个日期,我都会得到以下信息:I / System.out:Wed Dec 31 10:47:38 GMT 00:00 2在这里阅读一些解决方案,指导我定义onDateSet和getDateFromDatePicker方法,但它们似乎没有正常运作 . 非常感谢任何帮助,谢谢!

2 回答

  • 0

    使用DatePickerFragment时,通常会有一个在用户选择日期时触发的界面 . 这称为 DatePickerDialog.OnDateSetListener .

    在您的代码中,您将显示选择器,然后立即设置日期,而不是等待用户选择 . 所以你需要做的是当触发onDateSet回调方法时,用日期做你想做的事 .

    如果您在Activity中显示 DatePickerFragment ,则执行此操作的一种方法是创建一个允许将Fragment中的消息发送到活动的接口 .

  • 0

    经过一番挖掘,我按照我在Android编程:大书呆子牧场指南一书中读到的方法,明确指出了如何在两个片段之间传递数据 . 以下是我遵循的步骤:

    • 设置目标片段:在这里,我通过setTargetFragment方法创建了将接收日期(在我的情况下为TaskFragment)DatePickerFragment的目标片段的片段
    // set taskFragment as the target fragment of DatePickerFragment
        datePicker.setTargetFragment(TaskFragment.this, 0);
        datePicker.show(fm, "datePicker");
    
    • 通过DatePickerFragment 's onDateSet method. I did this by passing an intent with the date to the target fragment' s onActivityResult方法将日期发送到目标片段 .
    public void onDateSet(DatePicker view, int year, int month, int day) {
            // create date object using date set by user
            Calendar calendar = Calendar.getInstance();
            calendar.set(year, month, day);
            Date date = calendar.getTime();
    
            if (getTargetFragment() == null)
                return;
    
            Intent intent = new Intent();
            intent.putExtra(DATE, date);
    
            // pass intent to target fragment
            getTargetFragment().onActivityResult(getTargetRequestCode(), Activity.RESULT_OK, intent);
    
    • 覆盖目标片段中的onActivityResult方法以接受日期
    @Override
        public void onActivityResult(int requestCode, int resultCode, Intent data) {
            if (resultCode != Activity.RESULT_OK){
                return;
            }
    
            if (requestCode == REQUEST_DATE){
                Date date = (Date) data.getSerializableExtra(DatePickerFragment.DATE);
                task.setDate(date);
    
            }
        }
    

相关问题