首页 > 解决方案 > 我在 Android 中使用新的 Places SDK。AutocompleteSupportFragment 要求我将活动添加到清单中

问题描述

我正在使用新的地方 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)。我将如何强制生命周期或等待片段完全循环?

但是,当我选择 autocompletesupportfragment 时,我得到:

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);
  }
}

但是,我仍然收到“清单中未声明的活动”。

标签: androidandroid-fragmentsgoogle-places-api

解决方案


很可能您必须添加一个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>

推荐阅读