Android 自定义警报对话框上的空指针
我正在尝试通过自定义dialogframent类创建alertdialogsAndroid 自定义警报对话框上的空指针,android,android-alertdialog,android-dialogfragment,Android,Android Alertdialog,Android Dialogfragment,我正在尝试通过自定义dialogframent类创建alertdialogs public class Dialogs extends DialogFragment { @Override public Dialog onCreateDialog(Bundle saveInstanceState) { AlertDialog.Builder alert=new AlertDialog.Builder(getActivity()); //addit
public class Dialogs extends DialogFragment {
@Override
public Dialog onCreateDialog(Bundle saveInstanceState) {
AlertDialog.Builder alert=new AlertDialog.Builder(getActivity());
//additional custom layout here(skipped)
alertDialog=alert.create();
return alert.create();
}
public static Dialogs newInstance(String title, String fields, String buttons) {
Dialogs d = new Dialogs();
Bundle args = new Bundle();
args.putString(TITLE,title);
args.putString(FIELDS, fields);
args.putString(BUTTONS,buttons);
d.setArguments(args);
return d;
}
public List<Button> getButtons() {
return this.buttons;
}
public AlertDialog getDialog(){
return alertDialog;
}
得到
java.lang.NullPointerException: Attempt to invoke virtual method 'void android.app.AlertDialog.show()' on a null object reference
我有一种预感,就是这些参数是在d被创建之后才出现的。那么argumnets没有通过?谢谢你的帮助
编辑:这不是什么是空指针异常的问题。我很清楚这是什么。
我已经解决了这个问题
对于那些将来可能有类似问题的人。
我改变了在主活动中启动对话框的方式。
我好像错过了一笔零碎的交易
final Dialogs my_dialog=Dialogs.newInstance("Add New Task", NEW_TASK, NEW_TASK_BUTTON);
FragmentTransaction ft = getFragmentManager().beginTransaction();
my_dialog.show(ft, "dialog");
您将在对话框中设置一个对话框。这真的是你想要的吗?我不这么认为。扩展对话框并替代其方法。不要忘记传递上下文,这样您就能够解析资源(例如字符串、图像、颜色等)。。我为此做了一个小的lib,可以随意使用它,或者只是看一看以获得更好的理解。
(请注意,lib仅提供基本功能,可能存在一些bug)您不能放置
getActivity()
。这行不通。您需要传递活动对象
以下是我的代码片段:
public class DialogRating extends DialogFragment implements View.OnClickListener {
static BaseActivity activity;
String outletId;
String rating;
public DialogRating() {
}
public static DialogRating newInstance(BaseActivity activity, String outletId, String rating) {
DialogRating.activity = activity;
DialogRating fragment = new DialogRating();
Bundle args = new Bundle();
args.putString(Const.EXTRA_ID, outletId);
args.putString(Const.EXTRA_RATING, rating);
fragment.setArguments(args);
return fragment;
}}
public class DialogRating extends DialogFragment implements View.OnClickListener {
static BaseActivity activity;
String outletId;
String rating;
public DialogRating() {
}
public static DialogRating newInstance(BaseActivity activity, String outletId, String rating) {
DialogRating.activity = activity;
DialogRating fragment = new DialogRating();
Bundle args = new Bundle();
args.putString(Const.EXTRA_ID, outletId);
args.putString(Const.EXTRA_RATING, rating);
fragment.setArguments(args);
return fragment;
}}