Я использую новый Places SDK в Android.AutocompleteSupportFragment, и он требует от меня добавить действие в манифест - PullRequest
0 голосов
/ 19 февраля 2019

Я использую новые места SDK.Мой build.gradle:

implementation 'com.google.android.libraries.places:places:1.0.0'

Мой код:

 FragmentManager supportFragmentManager = getChildFragmentManager();
 FragmentTransaction ft = supportFragmentManager.beginTransaction();
 if(mAutocompleteFragment == null) {
      mAutocompleteFragment = new AutocompleteSupportFragment();
      ft.add(R.id.places_container, mAutocompleteFragment, AutocompleteSupportFragment.class.getSimpleName());
      ft.commit();
    }

List<Place.Field> places = new ArrayList<>();
places.add(Place.Field.ID);
places.add(Place.Field.NAME);
places.add(Place.Field.ADDRESS);
mAutocompleteFragment.setPlaceFields(places); //throws NPE getView() is null

Бросает NPE, потому что он пытается установить представление включенным в этом последнем методе, и представление является нулевым.Я подозреваю, что жизненный цикл фрагмента не был вызван (onViewCreated).Как заставить форсированный жизненный цикл или ждать полного цикла фрагмента?

Однако, когда я выбираю автозаполнение вспомогательного фрагмента, я получаю:

android.content.ActivityNotFoundException: Невозможно выполнитьнайти явный класс активности {com.activehours.debug / com.google.android.libraries.places.widget.AutocompleteActivity};Вы объявили об этом действии в вашем AndroidManifest.xml?

Вот мой манифест:

    <activity
    android:name="com.google.android.libraries.places.widget.AutocompleteActivity"
        android:theme="@style/PlacesAutocompleteThemeOverlay">
    </activity>

В документации не упоминается включение этого действия вмой манифестПомогите!

РЕДАКТИРОВАТЬ: Я обошел NPE, расширив класс следующим образом:

public class AHAutocompleteSupportFragment extends AutocompleteSupportFragment 
 {

  @Override
  public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
    super.onViewCreated(view, savedInstanceState);
    List<Place.Field> places = new ArrayList<>();
    places.add(Place.Field.ID);
    places.add(Place.Field.NAME);
    places.add(Place.Field.ADDRESS);
    this.setPlaceFields(places);
  }
}

Однако я все еще получаю "Деятельность, не объявленная вManifest».

Ответы [ 2 ]

0 голосов
/ 22 февраля 2019

Скорее всего, вам нужно добавить intent-filter, чтобы он нашел то, что ожидает:

<activity
    android:name="com.google.android.libraries.places.widget.AutocompleteActivity"
    android:theme="@style/PlacesAutocompleteThemeOverlay">
    <intent-filter>
        <action android:name="android.intent.action.MAIN"/>
    </intent-filter>
</activity>
0 голосов
/ 22 февраля 2019

Вам не нужно создавать экземпляр этого фрагмента самостоятельно ...

mAutocompleteFragment = new AutocompleteSupportFragment();

Есть ли причина, по которой вы не просто используете фрагмент внутри существующего действия?

Ниже приведенокод, который я использую в своем приложении с новым AutocompleteSupportFragment, который работает просто отлично.

<android.support.v7.widget.CardView
                android:layout_width="0dp"
                android:layout_height="@dimen/shop_search_search_area_height"
                android:layout_marginTop="@dimen/shop_search_search_area_margin"
                android:layout_marginStart="@dimen/shop_search_search_area_margin"
                app:cardElevation="8dp"
                android:layout_weight="4">

                <fragment
                    android:id="@+id/shop_search_autocomplete_fragment"
                    android:name="com.google.android.libraries.places.widget.AutocompleteSupportFragment"
                    android:layout_width="match_parent"
                    android:layout_height="match_parent">

                    <ImageView
                        android:id="@+id/shop_search_voice_icon"
                        android:layout_width="@dimen/shop_search_mic_size"
                        android:layout_height="@dimen/shop_search_mic_size"
                        android:layout_marginEnd="@dimen/shop_search_mic_margin_right"
                        android:contentDescription="@null"
                        android:onClick="@{() -> model.voicePlaceSearch()}"
                        android:src="@drawable/ic_mic_24dp_gray" />
                </fragment>
            </android.support.v7.widget.CardView>

Чтобы потом овладеть им в моем коде, я бы использовал тот же код, что и в учебном пособии...

AutocompleteSupportFragment autocompleteFragment = (AutocompleteSupportFragment)
        getSupportFragmentManager().findFragmentById(R.id.shop_search_autocomplete_fragment);
...