Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
817 views
in Technique[技术] by (71.8m points)

java - Fragment null must be a public static class to be properly recreated from instance state

I am not able to figure out why my app crashes when getSupportFragmentManager() is called.I have used similar code in other apps to create alert dialogs without any issues.please help!

DialogFragment df = new DialogFragment(){

        @NonNull
        @Override
        public Dialog onCreateDialog(Bundle savedInstanceState) {
            AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
            View view = getActivity().getLayoutInflater().inflate(R.layout.addincome,null);
            builder.setView(view);
            //capture
            final EditText amountEditText=(EditText)view.findViewById(R.id.edit_amount);
            final EditText descriptionEditText=(EditText)view.findViewById(R.id.edit_description);
            builder.setNegativeButton(android.R.string.cancel,null);
            builder.setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    newIncome.setAmount(Double.parseDouble(amountEditText.getText().toString()));
                    newIncome.setDescription(descriptionEditText.getText().toString());
                    user.incomes.add(newIncome);
                    HashMap<String,User> modified = new HashMap<>();
                    modified.put(uid,user);
                    rootref.setValue(modified);
                }
            });
            return builder.create();
        }
    };
    df.show(getSupportFragmentManager(),"addIncome");
See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)

Your DialogFragment is an anonymous class, and in Java anonymous classes can only be instantiated by parent classes: the new DialogFragment() is in fact this.new DialogFragment(). Apparently, when FragmentManager tries to recreate your DialogFragment upon a configuration change, it can't, since it doesn't have the access to the instance of the parent class. The solution would be to either declare a static subclass of DialogFragment, or to declare a top-level subclass of DialogFragment, and use it instead of the anonymous class.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...