2013-12-10 22 views
4

我有一個TimePickerDialog偏好與延伸DialogPreference一個「TimePreference」類:TimePickerDialog中性按鈕

public class TimePreference extends DialogPreference{ 
... 
private TimePicker picker=null; 

... 
public TimePreference(Context ctxt, AttributeSet attrs){ 
    super(ctxt, attrs); 
    setPositiveButtonText(android.R.string.ok); 
    setNegativeButtonText(android.R.string.cancel); 
} 

@Override 
protected View onCreateDialogView(){ 
    picker=new TimePicker(getContext()); 
    return(picker); 
} 
... 
} 

我想補充的第三個按鈕,這將偏好設置爲當前時間,然後關閉對話框,如下所示:

enter image description here

的問題是,有沒有這樣做使用TimePickers或者我應該做一個自定義AlertDialog的一些方法?

回答

2

感謝您的回答!我會告訴你我是如何最終管理它的,以防有人想要這樣做。

首先,我有一個佈局文件good_timedialog.xml它看起來像我想: TimePicker with Positive, neutral and negative buttons

然後,我有一個TimePreference類:

public class TimePreference extends DialogPreference{ 
    private final static String lTag="CustomTimeDialog"; 
    private TimePicker picker; 
    protected TimeObj lastTime; 

public TimePreference(Context ctxt,AttributeSet atrs) { 
    super(ctxt,atrs); 
    setDialogLayoutResource(R.layout.good_timedialog); // this loads the layout 
    setPositiveButtonText(""); 
    setNegativeButtonText(""); // hide default buttons 
    setDialogTitle(ctxt.getString(R.string.selectTimeTimePrefTitle)); 
} 

@Override 
protected void onBindDialogView(View v){ 
    super.onBindDialogView(v); 

    v.findViewById(R.id.butCancel).setOnClickListener(new OnClickListener(){ 
     @Override 
     public void onClick(View v){ 
      Log.d(lTag,"cancel clicked"); 
      getDialog().dismiss(); 
     } 
    }); 
    v.findViewById(R.id.butNow).setOnClickListener(new OnClickListener(){ 
     @Override 
     public void onClick(View v){ 
      Log.d(lTag,"now clicked"); 
      saveToSP(true); 
      getDialog().dismiss(); 
     } 
    }); 
    v.findViewById(R.id.butOK).setOnClickListener(new OnClickListener(){ 
     @Override 
     public void onClick(View v){ 
      Log.d(lTag,"ok clicked"); 
      saveToSP(false); 
      getDialog().dismiss(); 
     } 
    }); 

    picker = (TimePicker) v.findViewById(R.id.timePicker); 
    if (picker!=null) { 
     picker.setCurrentHour(lastTime.hr); 
     picker.setCurrentMinute(lastTime.min); 
    } else { // if it is null 
     Log.w(lTag,"var picker is null!"); 
    } 

} 

void saveToSP(boolean now){ 
    if (now) lastTime = new TimeObj(); // make it the current time 
    else { 
     lastTime.hr = picker.getCurrentHour(); 
     lastTime.min = picker.getCurrentMinute(); 
    } 
    setSummary(lastTime.giveString()); // update Summary like hh:mm 16:28 

    int time = lastTime.giveMinutes(); // 10:30am will be 630 minutes 

    // save to sharedprefs 
    if(callChangeListener(time)){ 
     persistInt(time); 
     if(getEditor().commit()) Log.d(lTag,"Successfully saved changes"); 
     else Log.w(lTag,"Did NOT save changes"); 

    } 
} 
//... more ... 
} 

,並在perferences.xml文件,我可以使用<com.example.TimePreference android:key="test"/>

0

默認情況下,Dialog支持三個按鈕 - 正值,負值和取消。你可以根據你的意願重命名它們,並相應地處理它們。