2012-06-24 1 views
3

Я настроил пользовательский 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); 
} 

ответ

3

увидеть этот link согласно этим он работает

попробовать

yourTimePickerDialog.getButton(whichButton).setText("New Text"); (put the null check if needed) 

or 

yourTimePickerDialog.setButton(BUTTON_POSITIVE, "Find", yourTimePickerDialog); 
+0

вы можете предоставить немного больше кода, где вы создали диалог. .. –

+0

Нет, это не сработает. Точно такой же результат. Кнопки сохраняют первый текст, который я установил на них. Установка текста во второй раз ничего не сделает. –

+0

не уверен, но может попробовать этот yourTimePickerDialog.getButton (whichButton) .setText («Новый текст»); (поставьте нулевую проверку, если необходимо) –

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