Marcin P
Marcin P

Reputation: 151

Fragments should be static such that they can be re-instantiated by the system, and anonymous classes are not static

The following code shows me the following error:

"Fragments should be static such that they can be re-instantiated by the system, and anonymous classes are not static"

How can I fix it?

public void A(){
    final DialogFragment dialogFragment =
        new DialogFragment() {

        @Override
        public Dialog onCreateDialog(Bundle bundle) {
            AlertDialog.Builder builder =
                new AlertDialog.Builder(getActivity());

            builder.setMessage("Hello");
            builder.setPositiveButton("OK",
                new DialogInterface.OnClickListener() {

                    @Override
                    public void onClick(DialogInterface dialog,
                                        int which) {
                        B();
                    }
                }
            );

            return builder.create();
        }
    };
}

private void B() {
    //...
}

Upvotes: 2

Views: 4356

Answers (1)

Surya Prakash Kushawah
Surya Prakash Kushawah

Reputation: 3201

Read fragment life cycle You should use like this

public static class MyAlertDialogFragment extends DialogFragment {

    public static MyAlertDialogFragment newInstance(int title) {
        MyAlertDialogFragment frag = new MyAlertDialogFragment();
        Bundle args = new Bundle();
        args.putInt("title", title);
        frag.setArguments(args);
        return frag;
    }

    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        int title = getArguments().getInt("title");

        return new AlertDialog.Builder(getActivity())
                .setIcon(R.drawable.alert_dialog_icon)
                .setTitle(title)
                .setPositiveButton(R.string.alert_dialog_ok,
                    new DialogInterface.OnClickListener() {
                        public void onClick(DialogInterface dialog, int whichButton) {
                            ((FragmentAlertDialog)getActivity()).doPositiveClick();
                        }
                    }
                )
                .setNegativeButton(R.string.alert_dialog_cancel,
                    new DialogInterface.OnClickListener() {
                        public void onClick(DialogInterface dialog, int whichButton) {
                            ((FragmentAlertDialog)getActivity()).doNegativeClick();
                        }
                    }
                )
                .create();
    }
}

Upvotes: 5

Related Questions