【问题标题】:OnPlaceSelectedListener of SupportPlaceAutocompleteFragment not firedSupportPlaceAutocompleteFragment 的 OnPlaceSelectedListener 未触发
【发布时间】:2016-11-05 22:38:29
【问题描述】:

SupportPlaceAutocompleteFragmentOnPlaceSelectedListener 方法有问题。

我的 onViewCreated() 方法:

@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
    super.onViewCreated(view, savedInstanceState);

    // Initialise a new fragment inside of this one.
    mFragmentManager = getChildFragmentManager();
    mSupportMapFragment = (SupportMapFragment) mFragmentManager.findFragmentByTag("mapFragment");
    mSupportPlaceAutocompleteFragment = (SupportPlaceAutocompleteFragment) mFragmentManager.findFragmentByTag("autocompleteFragment");

    // Never inflate fragments inside other fragments in a layout.xml!
    // Do it programmatically.
    // See here for reference: https://stackoverflow.com/a/19815266/4938112.
    if (mSupportMapFragment == null) {
        mSupportMapFragment = new SupportMapFragment();
        fragmentTransaction(mFragmentManager, mSupportMapFragment, R.id.map_fragment_container, "mapFragment");
    }

    // Asynchronous thread to load map.
    mSupportMapFragment.getMapAsync(this);


    if (mSupportPlaceAutocompleteFragment == null) {
        mSupportPlaceAutocompleteFragment = new SupportPlaceAutocompleteFragment();
        fragmentTransaction(mFragmentManager, mSupportPlaceAutocompleteFragment, R.id.card_view, "autocompleteFragment");
    }

    // Filter for a specific place type.
    AutocompleteFilter typeFilter = new AutocompleteFilter.Builder()
            .setTypeFilter(AutocompleteFilter.TYPE_FILTER_CITIES)
            .build();
    mSupportPlaceAutocompleteFragment.setFilter(typeFilter);

    Log.d("I'M HERE", "Hello.");

    mSupportPlaceAutocompleteFragment.setOnPlaceSelectedListener(new PlaceSelectionListener() {
        @Override
        public void onPlaceSelected(Place place) {
            // TODO: Get info about the selected place.
            Log.i("PLACE", "Place: " + place.getName());
            int flag = 1;
            Log.d("FLAG", "flag: " + flag);
        }

        @Override
        public void onError(Status status) {
            // TODO: Handle the error.
            Log.i("PLACE_ERROR", "An error occurred: " + status);
            int flag = 0;
            Log.d("FLAG", "flag: " + flag);
        }
    });

    Log.d("I'M HERE, TOO", "Hello.");

}

当我选择一个地点(所有 API 都已启用并且我有一个 Google 密钥)时,AutoCompleteFragment 刚刚关闭,地图上没有任何反应。 mSupportPlaceAutocompleteFragment.setOnPlaceSelectedListener(...) 方法未被触发。

有什么提示吗?

我的问题与this question中的类似。

我也在使用嵌套片段,我无法理解在这种情况下如何查看 onActivityResult() 方法。

【问题讨论】:

    标签: android android-fragments android-viewpager google-maps-android-api-2 google-places-api


    【解决方案1】:

    终于解决了这个问题:希望对某人有所帮助。

    我在我的 MainActivity 的 onActivityResult() 方法中添加了这条臭名昭著的行

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
    
        ...
    }
    

    然后确实在我的 MapFragment 中放入了相同的方法

        @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
    }
    

    现在嵌套片段正在发回其数据。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-26
      相关资源
      最近更新 更多