当前位置: 首页 > 知识库问答 >
问题:

在Android中从DatePickerFragment获取Date对象

徐柏
2023-03-14

我已经在我的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中从这个日期选取器中检索日期,并将我的类任务中的“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:002阅读这里的一些解决方案指示我定义onDateSet和getDateFromDatePicker方法,但它们似乎不能正常工作。非常感谢任何帮助,谢谢!

共有1个答案

叶越
2023-03-14

经过一番挖掘,我遵循了我在《Android Programming:the Big Nerd Ranch Guide》一书中读到的方法,该方法明确规定了如何在两个片段之间传递数据。下面是我遵循的步骤:

  1. 设置目标片段:在这里,我通过setTargetFragment方法将接收日期的片段(在我的示例中为TaskFragment)设置为DatePickerFragment的目标片段


    // set taskFragment as the target fragment of DatePickerFragment
    datePicker.setTargetFragment(TaskFragment.this, 0);
    datePicker.show(fm, "datePicker");




    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);




    @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);

        }
    }


 类似资料:
  • 问题内容: 通过使用以下代码: 我已经按日期对象转换了字符串日期并获得了值: 2013年2月17日,星期日,格林尼治标准时间07:00:00 现在,我要从此处提取日期(星期日/星期一)和月份。 问题答案:

  • 问题内容: 我得到的输出为 控制器中的日期Mon Dec 31 IST 2012 请提出一种以格式输出日期的方法。需要以日期格式而不是字符串形式输出,以便将输出存储在mysql db的字段中 问题答案: 声明后 您有一个对象, 可以将其按原样存储在mysql DB中 (列类型:datetime)。 但是,在打印时,它默认为实现。我认为您希望获得类似Date @的输出,但是toString以用户可读

  • 问题内容: 通过将值放入构造函数中,我可以将unix时间戳转换为对象。例如:我可以将其作为。 但是在那之后,如何从该对象取回unix时间戳? 问题答案: 检索自格林尼治标准时间1970年1月1日传递给构造函数以来的毫秒数。从中获得Unix时间(相同,但以秒为单位)并不难。

  • 问题内容: 我正在使用Android中的OpenCV库。我有一个实现的类。 覆盖方法如下所示, 正如我希望图像数据可以在图像处理中进一步使用,而不是保存和重新加载图像。 从Byte数组获取Mat对象的最有效方法是什么?我已经尝试过这些方法: 不知道图像发生了什么。 然后转换为位图, 在这种情况下,红色变为蓝色。 在保存图像以备将来使用时,我也没有任何问题,但这导致我出现异常,因为当我使用先前存储的

  • 问题内容: 甲提供方法返回原语。是否有可能获得允许的物体?我正在检索的数据库字段可以为空,并且只要该字段为,就会返回我。 谢谢 问题答案: 只需检查该字段是否在使用。 或者,如果你能保证你使用正确的数据库列类型,以便真正返回(因而没有,或),那么你也可以强制转换它。 更新:对于Java 1.7+

  • 问题内容: 我想从对象中删除时间。 但是,当我转换此日期(格式)时,它也在附加时间。 我根本不想要时间。我想要的只是“ 21/03/2012”。 问题答案: 快速答案是: 不,您不能这样做。 因为那是用来干什么的。 来自的javadoc : Date类表示特定的时间瞬间,精度为毫秒。 但是 ,由于此类仅是数据对象。它不在乎我们如何描述它。当我们看到日期时,可以说是,这就是您所需要的。有很多方法可以