2012-08-09 17 views
4

我有一個DatePickerDialog的問題,遵循Android教程的步驟。Android的DataPickerDialog onDateChanged不是射擊

鏈接一個TextView推出DatePickerDialog時被集中,你可以看到如下:

EditText fNac = (EditText)findViewById(R.id.regFecha); 
      fNac.setonfocusChangeListener(new View.onfocusChangeListener(){ 

        @Override 
        public void onfocusChange(View v, boolean hasFocus) { 
          // TODO Auto-generated method stub 
          // Desde aquí lanzamos el datepicker 
          if (hasFocus){ 
            DialogFragment newFragment = new DatePickerFragment(); 
            newFragment.show(getSupportFragmentManager() , "datePicker"); 
          } 
        } 

做工精細,在DatePickerDialog啓動。我實例以這種方式創造了一個新的DatePickerFragment類:

import java.util.Calendar; 

import android.app.DatePickerDialog; 
import android.app.Dialog; 
import android.os.Bundle; 
import android.support.v4.app.DialogFragment; 
import android.util.Log; 
import android.widget.DatePicker; 

public class DatePickerFragment extends DialogFragment implements DatePickerDialog.OnDateSetListener { 

    private DatePickerDialog mDatePickerDialog; 

    @Override 
    public Dialog onCreateDialog(Bundle savedInstanceState){ 
      // Usamos la fecha actual como primera fecha a mostrar 
      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); 

      // Devolvemos la instancia de un Dialog con la fecha actual 
      mDatePickerDialog = new DatePickerDialog(getActivity(),this,year,month,day); 
      return mDatePickerDialog; 
    } 

    @Override 
    public void onDateSet(DatePicker view, int year, int month, int day) { 
      // TODO Auto-generated method stub 
      Log.v("LOG_CAT","OK"); 
    } 

    public void onDateChanged(DatePicker view, int year, int monthOfYear, 
        int dayOfMonth) { 
      // TODO Auto-generated method stub 
      Log.v("LOG_CAT", "Ok2"); 
    } 

}

這裏是問題。我想使用onDateChanged方法更改Dialog的標題,但它永遠不會被調用。我試圖創建一個onDateChangedListener,但DatePickerDialog沒有。

我該怎麼做?

在此先感謝。

回答

6

只需擴展DatePickerDialog類並覆蓋onDateChanged,如下所示。我包含一個新的構造函數,它接受一個Calendar對象並設置年月日本身,爲您節省不必要的輸入。 (我不明白爲什麼這不是一個選項了。)反正這裏是如何使用類和較短的構造函數:

public class DatePickerFragment extends DialogFragment implements OnDateSetListener { 
    public class MyDatePickerDialog extends DatePickerDialog { 
     private Calendar calendar; 
     private final String format = "EEEE, MMMM dd, yyyy"; 

     // Regular constructor 
     public MyDatePickerDialog(Context context, OnDateSetListener callBack, int year, int monthOfYear, int dayOfMonth) { 
      super(context, callBack, year, monthOfYear, dayOfMonth); 
      calendar = Calendar.getInstance(); 
     } 

     // Short constructor 
     public MyDatePickerDialog(Context context, OnDateSetListener callBack, Calendar calendar) { 
      super(context, callBack, calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH), calendar.get(Calendar.DAY_OF_MONTH)); 
      this.calendar = calendar; 
     } 

     @Override 
     public void onDateChanged(DatePicker view, int year, int month, int day) { 
      super.onDateChanged(view, year, month, day); 
      calendar.set(year, month, day); 
      setTitle(DateFormat.format(format, calendar)); 
     } 
    } 

    private MyDatePickerDialog mDatePickerDialog; 

    @Override 
    public Dialog onCreateDialog(Bundle savedInstanceState) { 
     mDatePickerDialog = new MyDatePickerDialog(this, this, Calendar.getInstance()); 
     return mDatePickerDialog; 
    } 

    @Override 
    public void onDateSet(DatePicker view, int year, int month, int day) { 
     Log.v("DatePickerFragment", "onDateSet"); 
    } 
} 
+0

它的工作原理!非常感謝。順便說一句,我在onCreateDialog中做了一點改動,它給了我一個錯誤,但現在一切都好了。 – 2012-08-10 08:48:32

+0

我能夠使用它來縮小ICS和ICS之前的差距。它允許我設置在BUTTON_POSITIVE onClick中使用的日期,而不是依賴於OnDateSet,無論該對話框如何關閉,都會調用該日期。 – Cameron 2013-02-08 14:52:55

+0

對於21目標,v7支持庫和Material Design主題,我無法獲得這個工作'onDateChanged'永遠不會被調用。 – jlindenbaum 2015-05-07 15:51:58

-2

也許你應該說

public class DatePickerFragment extends DialogFragment 
    implements DatePickerDialog.OnDateSetListener, DatePicker.OnDateChangedListener { 
    ... 
} 
+0

我試過這種方法,但沒有奏效。不管怎麼說,還是要謝謝你。 – 2012-08-10 08:45:02

0

我有解決方案,僅僅只在對話框中獲得的DatePicker並設置init方法

這裏是例子:

android.widget.DatePicker datePicker = mDatePickerDialog.getDatePicker();

,並設置初始化這樣

datePicker.init(INT年,月整型,詮釋天,OnDateChangedListener)

希望這有助於