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");
check which type of Fragment you have in your imports whether your'e using android.support.v4.app.Fragment or android.os.Fragment.
Your
DialogFragment
is an anonymous class, and in Java anonymous classes can only be instantiated by parent classes: thenew DialogFragment()
is in factthis.new DialogFragment()
. Apparently, whenFragmentManager
tries to recreate yourDialogFragment
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 astatic
subclass ofDialogFragment
, or to declare a top-level subclass ofDialogFragment
, and use it instead of the anonymous class.I know you have done this step but just asking did you tried to rebuild your APK?because if this code works in other applications then their must be some .classes issue.