如何在静态方法中处理点击监听器?
How can I handle the click listener inside the static method?
每次我想使用它时都初始化AlertDialog
很无聊,我有很多使用AlertDialog
的活动所以我想简化它并创建一个class 初始化 AlertDialog
并在需要时显示它。
这是我创建的 DialogManager
class:
public class DialogManager {
private static AlertDialog.Builder builder;
public static void show(Context context, int themeResId, String title, String message, String positiveButtonText) {
builder = new AlertDialog.Builder(context, themeResId)
.setTitle(title)
.setMessage(message)
.setPositiveButton(positiveButtonText, null);
builder.show();
}
public static void show(Context context, int themeResId, String title, String message, String positiveButtonText, String negativeButtonText) {
builder = new AlertDialog.Builder(context, themeResId)
.setTitle(title)
.setMessage(message)
.setPositiveButton(positiveButtonText, null)
.setNegativeButton(negativeButtonText, null);
builder.show();
}
}
一切正常,但我遇到了点击监听器的问题,我该如何处理点击监听器,因为每个 activity 都会以自己的方式处理按钮。
我该如何处理?
setPositiveButton
将 DialogInterface.OnClickListener
作为第二个参数,因此只需将其添加为方法参数即可
public static void show(Context context, int themeResId, String title, String message,
String positiveButtonText,
DialogInterface.OnClickListener positiveCallback) {
show(context, themeResId, title, message,
positiveButtonText, positiveCallback,
null, null); // no negative in this case
}
public static void show(Context context, int themeResId, String title, String message,
String positiveButtonText,
DialogInterface.OnClickListener positiveCallback,
String negativeButtonText,
DialogInterface.OnClickListener negativeCallback) {
AlertDialog.Builder builder = new AlertDialog.Builder(context, themeResId)
.setTitle(title)
.setMessage(message)
.setPositiveButton(positiveButtonText, positiveCallback);
if (negativeButtonText!=null) {
builder.setNegativeButton(negativeButtonText, negativeCallback);
}
builder.show();
}
并且不要过度使用 static
关键字,将 static
Builder
保留在该文件之上是不正确的方法(在某些情况下可能会导致内存泄漏,可能同样在你的情况下),所以删除下面的行并只保留本地构建器直到你调用 builder.show()
private static AlertDialog.Builder builder;
setPositiveButton 将 DialogInterface.OnClickListener 作为第二个参数,因此只需将其添加为方法参数即可。
每次我想使用它时都初始化AlertDialog
很无聊,我有很多使用AlertDialog
的活动所以我想简化它并创建一个class 初始化 AlertDialog
并在需要时显示它。
这是我创建的 DialogManager
class:
public class DialogManager {
private static AlertDialog.Builder builder;
public static void show(Context context, int themeResId, String title, String message, String positiveButtonText) {
builder = new AlertDialog.Builder(context, themeResId)
.setTitle(title)
.setMessage(message)
.setPositiveButton(positiveButtonText, null);
builder.show();
}
public static void show(Context context, int themeResId, String title, String message, String positiveButtonText, String negativeButtonText) {
builder = new AlertDialog.Builder(context, themeResId)
.setTitle(title)
.setMessage(message)
.setPositiveButton(positiveButtonText, null)
.setNegativeButton(negativeButtonText, null);
builder.show();
}
}
一切正常,但我遇到了点击监听器的问题,我该如何处理点击监听器,因为每个 activity 都会以自己的方式处理按钮。
我该如何处理?
setPositiveButton
将 DialogInterface.OnClickListener
作为第二个参数,因此只需将其添加为方法参数即可
public static void show(Context context, int themeResId, String title, String message,
String positiveButtonText,
DialogInterface.OnClickListener positiveCallback) {
show(context, themeResId, title, message,
positiveButtonText, positiveCallback,
null, null); // no negative in this case
}
public static void show(Context context, int themeResId, String title, String message,
String positiveButtonText,
DialogInterface.OnClickListener positiveCallback,
String negativeButtonText,
DialogInterface.OnClickListener negativeCallback) {
AlertDialog.Builder builder = new AlertDialog.Builder(context, themeResId)
.setTitle(title)
.setMessage(message)
.setPositiveButton(positiveButtonText, positiveCallback);
if (negativeButtonText!=null) {
builder.setNegativeButton(negativeButtonText, negativeCallback);
}
builder.show();
}
并且不要过度使用 static
关键字,将 static
Builder
保留在该文件之上是不正确的方法(在某些情况下可能会导致内存泄漏,可能同样在你的情况下),所以删除下面的行并只保留本地构建器直到你调用 builder.show()
private static AlertDialog.Builder builder;
setPositiveButton 将 DialogInterface.OnClickListener 作为第二个参数,因此只需将其添加为方法参数即可。