【发布时间】:2015-03-31 06:06:38
【问题描述】:
我想建造..
- 可重复使用的对话框
- 完全可自定义的布局(自定义颜色或字体等)
- 使用引用的 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..
}
我这样从 Activity 调用这些警报:
if(!isFinishing()) {
CustomAlert.showAlert(MainActivity.this, getResources().getString(R.string.network_no_connection));
}
即使我正在调用 isFinishing() 来检查主机 Activity 是否正在运行,我仍然看到 BadTokenException、is your Activity running?,并且我认为 isFinishing() 可能还不够。
我发现这个article 正在使用DialogFragment,但是当我考虑到上述要求时,我觉得对于这样一个小任务来说这是相当多的代码。
解决这个问题最推荐和最有效的解决方案是什么?
提前致谢!
【问题讨论】:
-
使用 getApplication 上下文来避免这个异常。当您的 Activity 使用或销毁时不可见并且您尝试使用其上下文时,就会发生这种情况
-
推荐方式是DialogFragments
-
@Arslan 由于潜在的内存泄漏,我对使用 ApplicationContext 有点谨慎。我不确定这是否是最好的解决方案。
-
@DavidJhons 是的,我倾向于使用
DialogFragment构建所有这些。感谢您的评论!
标签: android android-activity dialog dialogfragment