我正在尝试通过自定义对话框类
创建alertdialogspublic 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;
}
我通过
在我的主要活动中调用它public void AddNewTask() {
Dialogs my_dialog = Dialogs.newInstance("Add New Task",NEW_TASK,NEW_TASK_BUTTON);
my_dialog.getDiag().show();
}
获得
java.lang.NullPointerException: Attempt to invoke virtual method 'void android.app.AlertDialog.show()' on a null object reference
我有一种预感,就是在创建d之后放置了参数。所以argumnets没有通过?任何帮助表示赞赏
编辑:这不是什么是nullpointer异常的问题。我很清楚它是什么。 我已经解决了这个问题 对于那些可能在将来有类似问题的人。 我改变了在主要活动中启动对话框的方式。 好像我错过了片段交易。
final Dialogs my_dialog=Dialogs.newInstance("Add New Task", NEW_TASK, NEW_TASK_BUTTON);
FragmentTransaction ft = getFragmentManager().beginTransaction();
my_dialog.show(ft, "dialog");
答案 0 :(得分:-1)
您在对话框中设置了一个对话框。这真的是你想要的吗?我不这么认为。扩展Dialog并覆盖其方法。不要忘记传递上下文,这样你就可以解析资源(比如字符串,图像,颜色等)。我为此做了一点lib,随意使用它或者只是看看得到更好的理解。 MaterialDialog
(请注意,lib只提供基本功能,可能还有一些错误)
答案 1 :(得分:-1)
你不能放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;
}}