2013-12-10 1 views
4

У меня есть предпочтение TimePickerDialog с классом «TimePreference», который проходит DialogPreference: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

Диалог поддерживает три кнопки по умолчанию - положительные, отрицательные и отменяет. Вы можете переименовать их по своему желанию и обработать их соответствующим образом.

 Смежные вопросы

  • Нет связанных вопросов^_^