Я пытаюсь использовать автозаполнение Google Place (https://developers.google.com/ размещает / android-api / autocomplete) для реализации в моем приложении. Но я получил эту ошибку при переходе от этого фрагмента к другому фрагменту, а затем вернулся в этот фрагмент

 Caused by: java.lang.IllegalArgumentException: Binary XML file line #30: Duplicate id 0x7f0f010f, tag null, or parent id 0x7f0f00c0 with another fragment for com.google.android.gms.location.places.ui.PlaceAutocompleteFragment
                  at android.app.FragmentManagerImpl.onCreateView(FragmentManager.java:2148)

Это код Java

private PlaceAutocompleteFragment mSearchPAF;

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

    View view = inflater.inflate(R.layout.some_layout, container, false);
    mSearchLocationPAF = (PlaceAutocompleteFragment) parentActivity.getFragmentManager().findFragmentById(R.id.place_autocomplete_fragment);
}

Это файл XML

<RelativeLayout
    android:id="@+id/someRelativeLayout"
    android:layout_width="wrap_content"
    android:layout_height="36dp"
    android:layout_marginLeft="10dp"
    android:layout_marginRight="10dp"
    android:layout_marginTop="30dp"
    android:background="@drawable/some_drawable">
    <fragment
        android:id="@+id/place_autocomplete_fragment"
        android:name="com.google.android.gms.location.places.ui.PlaceAutocompleteFragment"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />
</RelativeLayout>

У меня также есть другой фрагмент карты в том же файле Java и XML, но мне удалось решить его, следуя ответам в этом посте ( Дублирующийся идентификатор, тег null или родительский идентификатор с другим фрагментом для com.google.android.gms.maps.MapFragment ) но я не могу найти решение для этого фрагмента автозаполнения Place

0
the newbie coder 29 Май 2017 в 07:23

2 ответа

Лучший ответ

Я решил эту проблему сам, следуя одному из ответов здесь Повторяющийся идентификатор, тег нулевой или родительский идентификатор с другим фрагментом для com.google.android.gms.maps.MapFragment

private PlaceAutocompleteFragment mSearchPAF;
@Override
public void onDestroyView() {
    super.onDestroyView();
    PlaceAutocompleteFragment f = (PlaceAutocompleteFragment) getFragmentManager()
                                     .findFragmentById(R.id.place_autocomplete_fragment);
    if (f != null) 
        getFragmentManager().beginTransaction().remove(f).commit();
}
3
the newbie coder 29 Май 2017 в 09:16

В настоящее время я работаю над своим проектом и выполнил свою основную деятельность с несколькими фрагментами (все еще новичок в Android Studio). В своем фрагменте навигации я использовал googleAutocomplete, предоставленный Google.

Этот код здесь реализован внутри OnCreateView ().

mPlace_Starting = (PlaceAutocompleteFragment)
        this.getChildFragmentManager().findFragmentById(R.id.place_starting);

AutocompleteFilter countryFilter = new AutocompleteFilter.Builder()
        .setTypeFilter(Place.TYPE_COUNTRY)
        .setCountry("PH")
        .build();

mPlace_Starting.setFilter(countryFilter);

mPlace_Starting.setOnPlaceSelectedListener(new PlaceSelectionListener() {
    @Override
    public void onPlaceSelected(Place place) {
        // TODO: Get info about the selected place:
        Log.i(TAG, "Starting Place:" + place.getName());
        Toast.makeText(getActivity(), "Starting Place: " + place.getName(),
                Toast.LENGTH_SHORT).show();

        double mLongitude = place.getLatLng().longitude;
        double mLatitude = place.getLatLng().latitude;

        mStartingpoint = new Waypoint(mLongitude,mLatitude);
        mStartpoint = new GeoCoordinate(mLongitude,mLatitude);
    }
    @Override
    public void onError(Status status) {
        //TODO: Handle the Error.
        Log.i(TAG, "An error occured: " + status);
    }
});

Я накачал свой виджет PlaceAutocompleteFragment от Google с помощью getChildFragmentManager (), поскольку виджет - это фрагмент, который нужно накачать внутри другого фрагмента (моего фрагмента навигации).

1
Dean Pinlac 27 Авг 2017 в 03:57