1
我有一個自定義首選項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