我想在多个类中使用相同的AlertDialog。这是我用来显示AlertDialog的函数:
public void incorrectFields()
{
AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(mActivity);
String emptyFields = "Empty Field(s)";
String emptyFieldsMessage = "Please ensure all fields are contain data";
dialogBuilder.setTitle(emptyFields);
dialogBuilder.setMessage(emptyFieldsMessage);
dialogBuilder.setNegativeButton("OK", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
}
});
dialogBuilder.setPositiveButton("Cancel", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
// continue with delete
}
});
dialogBuilder.create();
dialogBuilder.show();
}
当我在它初始化的同一个类中调用它时,它工作。但是当我从另一个类调用它时,我得到错误:
java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.pm.ApplicationInfo android.content.Context.getApplicationInfo()' on a null object reference
如何成功调用AlertDialog?请记住,我不能扩展包含AlertDialog代码的类,因为我已经扩展了另一个类。
答案 0 :(得分:1)
您应该通过参数获取上下文:
public void incorrectFields(Context context)
{
AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(context);
String emptyFields = "Empty Field(s)";
String emptyFieldsMessage = "Please ensure all fields are contain data";
dialogBuilder.setTitle(emptyFields);
dialogBuilder.setMessage(emptyFieldsMessage);
dialogBuilder.setNegativeButton("OK", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
}
});
dialogBuilder.setPositiveButton("Cancel", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
// continue with delete
}
});
dialogBuilder.create();
dialogBuilder.show();
}
然后,您可以从您调用的任何活动中获取上下文。 ;)
答案 1 :(得分:1)
更改方法声明如下
public static void incorrectFields(Context context)
将方法中的行更改为
AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(context);
另外我建议将方法移动到某个util类
在活动中调用方法
SomeUtilClass.incorrectFields(this)
片段中的调用方法
SomeUtilClass.incorrectFields(getContext())
答案 2 :(得分:0)
这是我经常在实践中做的事情。可能不是最好的方式,但我还没有发现它做了一些荒唐可笑的事情。如果我这样做,我会更新这个。 :)
static
即使您在某些活动中有以前的功能,并且您发现自己经常使用它们,请将它们更改为WeakReference
,然后将活动作为static utility class
(非常重要)传递到任何地方你需要从中调用它们,然后访问它们。
或者,您可以创建包含这些方法的{{1}},然后调用它们。