2017-01-19 108 views
0

我已经在我的Android应用程序中定义DatePickerFragment,这里是它的代码:我想要检索从TaskFragment这个日期选择器的日期,并设置获取Date对象中的Android

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

的“日期“属性任务等于所选日期

 // 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的:星期三12月31日10点47分38秒GMT + 00:00 2 这里读了一些解决方案,指示我来定义onDateSet和getDateFromDatePicker方法,但它们似乎不能正常工作。 任何帮助非常感谢,谢谢!

+0

你在哪里显示日期选择器,在活动? – FrankR

+0

否在名为TaskFragment的片段中。 – sums22

+0

我已经想通了,在调用方法getDateFromDatePicker发生被称为onDateSet方法之前,所以我想我不得不采取从onDateSet的值,并将其存放的地方,使他们可以通过TaskFragment类访问。 – sums22

回答

0

经过一番挖掘之后,我遵循了我在书中中的方法阅读的方法:Android编程:大书呆子牧场指南,它清楚地指定了如何在两个片段之间传递数据。 下面是我遵循的步骤:

  1. 设置一个靶片段: 在这里,我提出,将通过setTargetFragment方法接收的日期(TaskFragment在我的情况下)DatePickerFragment的靶片段的片段
 


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

 
  1. 通过DatePickerFragment的onDateSet方法发送日期到目标片段。我通过将日期的意图传递给目标片段的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); 
    
         } 
        } 
    
     
    
    0

    使用DatePickerFragment,你通常有当用户选择了日期时触发的接口。这叫做DatePickerDialog.OnDateSetListener

    在你的代码中显示的是选择器,然后设定日期马上而不是等待用户选择。所以你需要做的是当onDateSet回调方法被触发,然后做你想要的日期。

    如果您在活动中显示DatePickerFragment,则一种做法是创建一个接口,该接口允许将消息从Fragment发送到活动。

    相关问题