我想建..使用Activity的生命週期創建可重用對話框的最佳方式是什麼?
- 可重複使用的對話框
- 完全可定製的佈局(自定義顏色或字體等)
- 維持其生命週期中所引用的活動
- 使用重載我可以創建對話的多種變體,即標題,消息和回調的組合
- 以簡單的方式(如果可能的話)
目前我的自定義對話框類的樣子:
public class CustomAlert {
public interface OnSingleClickedListener {
public void onPositiveClicked();
}
public interface OnDualClickedListener {
public void onPositiveClicked();
public void onNegativeClicked();
}
/**
* Show simple alert without callback.
* @param context
* @param msg
*/
public static void showAlert(Context context, String msg) {
final Dialog dialog = new Dialog(context);
// Do some stuff
ok.setOnClickListener(new Button.OnClickListener() {
@Override
public void onClick(View view) {
dialog.dismiss();
}
});
dialog.show();
}
/**
* Show simple alert with callback.
* @param context
* @param msg
* @param listener
*/
public static void showAlert(Context context, String msg, final OnSingleClickedListener listener) {
final Dialog dialog = new Dialog(context);
// Do some stuff
ok.setOnClickListener(new Button.OnClickListener() {
@Override
public void onClick(View view) {
dialog.dismiss();
listener.onPositiveClicked();
}
});
dialog.show();
}
// Some other methods..
}
我呼籲這些警報從活動是這樣的:
if(!isFinishing()) {
CustomAlert.showAlert(MainActivity.this, getResources().getString(R.string.network_no_connection));
}
即使我打電話isFinishing()
檢查主機活動正在運行,我總是看到BadTokenException
,is your Activity running?
,我想也許isFinishing()
是不夠的。
我發現這個article這是使用DialogFragment
,但我覺得這是相當多的代碼這麼小的任務,當我考慮以上要求。
什麼是解決此問題的最值得推薦的有效解決方案?
在此先感謝!
使用getApplication上下文來避免此異常。這發生在你的活動不易被使用或銷燬,並且你試圖使用它的上下文 – Arslan 2015-03-31 06:16:52
推薦的方式是DialogFragments – 2015-03-31 07:56:30
@Arslan我對使用ApplicationContext有點小心,因爲潛在的內存泄漏。我不確定這是否是最佳解決方案。 – 2015-03-31 19:03:17