Я настроил пользовательский AlertDialog (фактически, пользовательский TimePickerDialog). Я использую OnShowListener, чтобы обновить текст кнопок в соответствии с условием. Я поместил этот код на отдельный метод:AlertDialog.setButton не может изменить текст кнопки?
private void changeState(){
if(!SleepAlarm.isActive()){
Log.d("RPod_MainActivity","SleepAlarm is NOT active");
this.setButton(TimePickerDialog.BUTTON1,(CharSequence)MainActivity.currentContext.getResources().getText(R.string.sleep_enable), sleepEnable);
this.setButton(TimePickerDialog.BUTTON2,(CharSequence)MainActivity.currentContext.getResources().getText(R.string.sleep_cancel), sleepDisable);
}
else{
Log.d("RPod_MainActivity","SleepAlarm is active");
this.setButton(TimePickerDialog.BUTTON1,(CharSequence)MainActivity.currentContext.getResources().getText(R.string.sleep_change), sleepEnable);
this.setButton(TimePickerDialog.BUTTON2,(CharSequence)MainActivity.currentContext.getResources().getText(R.string.sleep_disable), sleepDisable);
}
this.setTitle(R.string.sleep_title);
}
После того, как я нажал кнопку TimePickerDialog.BUTTON1, когда я показываю диалог снова условие выполняется, и текст должен измениться. Но это не так.
Я проверил с LogCat, что условие в порядке. В первый раз, когда я открываю диалог, я вижу, что «SleepAlarm не активен». Как только я нажал первую кнопку, при открытии диалога снова вижу, что «SleepAlarm активен» ... Но текст кнопок одинаковый!
Вот строки:
<string name="sleep_enable">Enable</string>
<string name="sleep_disable">Disable</string>
<string name="sleep_cancel">Cancel</string>
<string name="sleep_change">Change</string>
Edit: Я создал диалоговое окно с помощью этого кода:
showDialog(TIME_DIALOG_ID);
Реализация onCreateDialog:
@Override
protected Dialog onCreateDialog(int id) {
switch (id) {
case TIME_DIALOG_ID:
// set time picker as current time
timePicker = new SleepPickerDialog(this,this);
return timePicker;
}
return null;
}
И SleepPickerDialog (extends TimePickerDialog):
public SleepPickerDialog(Context context, OnTimeSetListener listener){
super(context, listener, MainActivity.sleep_hour, MainActivity.sleep_hour, true);
changeState();
this.setOnShowListener(showListener);
}
Algo, то onShowListener:
private DialogInterface.OnShowListener showListener = new DialogInterface.OnShowListener() {
@Override
public void onShow(DialogInterface dialog) {
// Cambiar botones
changeState();
}
};
Я что-то важное не хватает?
См. Принятые ответы на ответ для решения. Я отправляю полный код меняется здесь:
public SleepPickerDialog(Context context, OnTimeSetListener listener){
super(context, listener, MainActivity.sleep_hour, MainActivity.sleep_hour, true);
this.setButton(BUTTON_POSITIVE,(CharSequence)MainActivity.currentContext.getResources().getText(R.string.sleep_enable), sleepEnable);
this.setButton(BUTTON_NEGATIVE,(CharSequence)MainActivity.currentContext.getResources().getText(R.string.sleep_cancel), sleepDisable);
this.setOnShowListener(showListener);
}
private void changeState(){
if(!SleepAlarm.isActive()){
this.getButton(BUTTON_POSITIVE).setText(R.string.sleep_enable);
this.getButton(BUTTON_NEGATIVE).setText(R.string.sleep_cancel);
}
else{
this.getButton(BUTTON_POSITIVE).setText(R.string.sleep_change);
this.getButton(BUTTON_NEGATIVE).setText(R.string.sleep_disable);
}
this.setTitle(R.string.sleep_title);
}
вы можете предоставить немного больше кода, где вы создали диалог. .. –
Нет, это не сработает. Точно такой же результат. Кнопки сохраняют первый текст, который я установил на них. Установка текста во второй раз ничего не сделает. –
не уверен, но может попробовать этот yourTimePickerDialog.getButton (whichButton) .setText («Новый текст»); (поставьте нулевую проверку, если необходимо) –