2017-01-19 73 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發送到活動。

    相關問題