Java 调用Setter方法时,自定义对话框片段崩溃
我有一个像这样的片段Java 调用Setter方法时,自定义对话框片段崩溃,java,android,fragment,android-dialogfragment,Java,Android,Fragment,Android Dialogfragment,我有一个像这样的片段 public class CustomDialogFragment extends DialogFragment { private LinearLayout containerView; public static CustomDialogFragment newInstance() { CustomDialogFragment fragment = new EDActionSheet(); return fragme
public class CustomDialogFragment extends DialogFragment {
private LinearLayout containerView;
public static CustomDialogFragment newInstance() {
CustomDialogFragment fragment = new EDActionSheet();
return fragment;
}
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
final Dialog dialog = new Dialog(getActivity());
dialog.getWindow().requestFeature(Window.FEATURE_NO_TITLE);
dialog.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
//MARK - containerView
LinearLayout.LayoutParams containerViewLayoutParams = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT);
containerView = new LinearLayout(dialog.getContext());
containerView.setLayoutParams(containerViewLayoutParams);
containerView.setOrientation(LinearLayout.VERTICAL);
dialog.setContentView(containerView);
DisplayMetrics displaymetrics = new DisplayMetrics();
dialog.getWindow().getWindowManager().getDefaultDisplay().getMetrics(displaymetrics);
WindowManager.LayoutParams params = dialog.getWindow().getAttributes();
params.width = (int) (displaymetrics.widthPixels * 0.95);
params.gravity = Gravity.BOTTOM;
dialog.getWindow().setAttributes(params);
return dialog;
}
public void setColor(int color) {
containerView.setBackgroundColor(color);
}
从外面我称之为DialogFragment
CustomDialogFragment fragment = CustomDialogFragment.newInstance();
fragment.setColor(ContextCompat.getColor(this, Color.BLUE));
fragment.show(getFragmentManager(), "Dialog");
我听到飞机失事时说
testapp.android.testapp E/AndroidRuntime: FATAL EXCEPTION: main
Process: id.testapp.android.testapp, PID: 5749
java.lang.NullPointerException: Attempt to invoke virtual method 'void
id.testapp.android.testapp.controls.CustomDialogFragment.setColor(int)'
on a null object reference
at
id.testapp.android.testapp.controls.CustomDialogFragment.setColor(CustomDialogFragment.java:234)
有什么想法吗 您的
containerView
引用尚未初始化。看看在初始化之前如何调用onCreateDialog()
您需要通过以下几种方法之一进行重构。最简单的方法可能是让setColor方法只存储一个变量,该变量与初始化时“containerView”应该设置的背景有关