问题
I am using the Google Map's Places API's AutoCompleteSearchFragment in a Dialog. The error that I am getting occurs when I launch the dialog, close it, then relaunch it.
Error Message:
Error inflating class fragment. Caused by: java.lang.IllegalArgumentException: Binary XML file line #69: Duplicate id 0x7f0a0027, tag null, or parent id 0x7f0a00c7 with another fragment for `com.google.android.libraries.places.widget.AutocompleteSearchFragmet
My code:
Dialog alert = new Dialog(MainActivity.this);
alert.requestWindowFeature(Window.FEATURE_NO_TITLE);
alert.setContentView(R.layout.forgot_info);
alert.setCancelable(true);
alert.getWindow().setBackgroundDrawableResource(android.R.color.transparent);
AutocompleteSupportFragment autocompleteSupportFragment =
(AutocompleteSupportFragment) getSupportFragmentManager().findFragmentById(R.id.auto2);
The error also goes on to mention android.support.v4.app.FragmentActivity.onCreateView and android.view.LayoutInflater.createViewFromTag.
Is it possible that the duplicate id error is occurring because the Activity believes that there is more than one AutocompleteSearchFragments?
If so, how would I be able to delete or remove the AutocompleteSearchFragment once the Dialog is closed?
回答1:
I found the solution to the problem, for those that it may help later on.
In order to prevent the Activity from thinking that there is more than one AutocompleteSearchFragment with the same ID each time I open the Dialog, I set a onDismissListener for the Dialog in order to remove the AutocompleteSearchFragment:
The code:
alert.setOnDismissListener(new DialogInterface.OnDismissListener() {
@Override
public void onDismiss(DialogInterface dialog) {
getSupportFragmentManager().beginTransaction().
remove((Fragment) autocompleteSupportFragment).commit();
}
});
What the code above does is when the Dialog called alert is dismissed, it uses the SupportFragmentManager to remove that AutocompleteSearchFragment.
来源:https://stackoverflow.com/questions/57015841/autocompletesearchfragment-in-dialog-gives-inflateexception