【问题标题】:Custom Dialog Fragment Crashes when Setter Method is Called调用 Setter 方法时自定义对话框片段崩溃
【发布时间】:2016-01-01 04:22:47
【问题描述】:

我有一个这样的 CustomDialogFragment

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)

有什么想法吗?

【问题讨论】:

    标签: java android fragment android-dialogfragment


    【解决方案1】:

    您的containerView 引用尚未初始化。看看onCreateDialog()在初始化之前是如何被调用的。

    您需要通过以下几种方式之一进行重构。最简单的方法可能是让 setColor 方法只存储一个变量,以便在初始化时也应该设置“containerView”的背景。

    【讨论】:

      猜你喜欢
      • 2016-05-21
      • 1970-01-01
      • 2014-04-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-16
      相关资源
      最近更新 更多