У меня есть пользовательские предпочтения, TimePreference, который распространяется на DialogPreference
. Он имеет диалоговый пользовательский ресурс, который выглядит как этотДиалог отклонения пользовательских предпочтений
источником является
@Override
protected void onBindDialogView(View v){
super.onBindDialogView(v);
v.findViewById(R.id.butCancel).setOnClickListener(onClickL);
v.findViewById(R.id.butNow).setOnClickListener(onClickL);
v.findViewById(R.id.butOK).setOnClickListener(onClickL);
//....
}
//...
private final View.OnClickListener onClickL = new View.OnClickListener(){
@Override
public void onClick(View v) {
Log.d(lTag, v + " clicked");
switch (v.getId()) {
case R.id.butOK: saveToSP(false);break;
case R.id.butNow: saveToSP(true);
}
try {
getDialog().dismiss(); //may throw null pointer
} catch (Exception e) { Log.w(lTag, "Exc @onClickL", e); }
}
};
//...
Я нашел ошибку, где, если вы щелкнули то же предпочтение очень быстро дважды (на экране предпочтений) откроются два диалога. Вы можете закрыть первый, но, когда вы попытаетесь закрыть второе, приложение будет разбиваться. Это было исключение NullPointerException, поэтому я включил его в блок try-catch. Теперь исключение поймано, но кнопки не закрывают диалог. Обратите внимание, что, нажав назад, это делает близко.
Как закрыть второе диалоговое окно (возможно, путем моделирования поведения кнопки «Назад»?)? Обратите внимание: я хочу, чтобы уровень API ниже 10.
причины этого диалога внешнего вида является пользовательским или встроенным? – Saqib
Почему бы вам не отключить кнопку при нажатии и включить ее при закрытии диалога? –
@Saqib Встроенный, я установил его в .xml-файле – anestv