У меня есть 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)

Есть мысли?

Ответы (1)

ваша ссылка containerView еще не инициализирована. Посмотрите, как onCreateDialog () должен вызываться перед его инициализацией.

Вам нужно будет провести рефакторинг одним из нескольких способов. Самым простым, вероятно, было бы просто сохранить в методе setColor переменную относительно того, какой 'containerView' также должен устанавливать свой фон, когда он инициализируется.

2022 WebDevInsider