Fragment null必须是要从实例状态正确重新创建的公共静态类

当调用getSupportFragmentManager()时,我无法弄清楚为什么我的应用程序崩溃。我在其他应用程序中使用了类似的代码来创建警告对话框而没有任何问题。请帮忙!

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 modified = new HashMap(); modified.put(uid,user); rootref.setValue(modified); } }); return builder.create(); } }; df.show(getSupportFragmentManager(),"addIncome"); 

您的DialogFragment是一个匿名类,在Java中,匿名类只能由父类实例化: new DialogFragment()实际上是this.new DialogFragment() 。 显然,当FragmentManager尝试在配置更改时重新创建DialogFragment时,它不能,因为它无法访问父类的实例。 解决方案是声明DialogFragmentstatic子类,或者声明DialogFragment的顶级子类,并使用它而不是匿名类。

我知道你已经完成了这一步,但只是问你是否试图重建你的APK?因为如果这个代码在其他应用程序中有效,那么它们必须是一些.classes问题。

检查你导入的Fragment类型是否使用android.support.v4.app.Fragment或android.os.Fragment。