Android 替换Google Map的SetOnInfo窗口ClickListener接口方法中的片段时UI挂起

Android 替换Google Map的SetOnInfo窗口ClickListener接口方法中的片段时UI挂起,android,android-fragments,google-maps-markers,google-maps-android-api-2,Android,Android Fragments,Google Maps Markers,Google Maps Android Api 2,我在应用程序和显示标记中使用谷歌地图 现在单击标记窗口,我想用其他片段替换当前片段 for (StoreData store : comp.getArrStoreList()) { LatLng l = new LatLng(Double.parseDouble(store.getLat()), Double.parseDouble(store.getLng())); MarkerO

我在应用程序和显示标记中使用谷歌地图

现在单击标记窗口,我想用其他片段替换当前片段

for (StoreData store : comp.getArrStoreList()) {
                LatLng l = new LatLng(Double.parseDouble(store.getLat()),
                        Double.parseDouble(store.getLng()));

                MarkerOptions marker = new MarkerOptions()
                        .position(l)
                        .title(store.getName())
                        .snippet(store.getCity())
                        .icon(BitmapDescriptorFactory
                                .defaultMarker(BitmapDescriptorFactory.HUE_AZURE));

                Marker mrkr = mapCompanyList.addMarker(marker);

                CompanyStoreData companyStoreData = new CompanyStoreData();

                companyStoreData.setStoreData(store);

                companyStoreData.setCompanyId(comp.getId());

                listStoreData.put(mrkr, companyStoreData);


                mapCompanyList
                .setOnInfoWindowClickListener(new OnInfoWindowClickListener() {

                    @Override
                    public void onInfoWindowClick(Marker marker) {

                        try {

                            StoreDetailsFragment storeDetails = new StoreDetailsFragment();
                            Bundle b = new Bundle();

                            b.putSerializable(UserDefaults.STORE_OBJECT,
                                    listStoreData.get(marker).getStoreData());
                            b.putString("StoreAppID", listStoreData.get(marker).getCompanyId());

                            storeDetails.setArguments(b);

                            ((BaseTabbarContainer) companyListFragment.getParentFragment()).replaceFragment(
                                    storeDetails, true); // here my UI is hang

                        } catch (Exception e) {
                            Log.e("Exception", "Exception :: " + e.getMessage());
                        }

                    }
                });
            }
我正在创建一个hashmap,它将
标记作为键,将storedata(我的自定义类对象)作为值。

在onInfoWindowClick上,我根据hashmap()的键获取存储数据的实例。它工作得很好,但是

((BaseTabbarContainer) companyListFragment.getParentFragment()).replaceFragment(
                                        storeDetails, true);  

这里我的UI被挂起了。问题是什么

我解决了问题。如果任何人面临此问题,请参考此

我所做的是创建一个处理程序,在延迟一段时间后运行代码段,并在调用处理程序后从
oninfo>click
方法返回

mapCompanyList
                .setOnInfoWindowClickListener(new OnInfoWindowClickListener() {

                    @Override
                    public void onInfoWindowClick(Marker marker) {

                        final Marker mark = marker;
                        try {

                            new Handler().postDelayed(new Runnable() {

                                @Override
                                public void run() {
                                    callStore(mark);
                                }
                            }, 100);


                            return;
                        } catch (Exception e) {
                            Log.e("Exception", "Exception :: " + e.getMessage());
                        }

                    }
                });
callStore

    private void callStore(Marker marker) {
        StoreDetailsFragment storeDetails = new StoreDetailsFragment();
        Bundle b = new Bundle();

        b.putSerializable(UserDefaults.STORE_OBJECT,
                listStoreData.get(marker).getStoreData());
        b.putString("StoreAppID", listStoreData.get(marker).getCompanyId());

        storeDetails.setArguments(b);

        ((BaseTabbarContainer) CompanyListFragment.this.getParentFragment()).replaceFragment(
                storeDetails, true);

    }
它成功了


但我仍然不明白为什么会挂起,为什么在延迟后运行代码时从OnInfo WindowClick方法返回后会得到解决?如果有人有任何想法,请分享。

我也面临着这个问题,我通过停止使用
fragmentManager.executePendingTransactions()
解决了这个问题,如果我用这一行来替换片段,那么它只是挂起,但没有这一行,它的工作就没有任何问题。希望这将有助于将面临类似问题的人。谢谢。

事实上,我也有同样的问题,而且我还用定时器解决了这个问题。但我不认为这是一个好的解决方案,因为它不能保证这是有效的。非常不幸。我还想听听其他人是否知道为什么会发生这种情况。我知道这不是一个好办法,尽管它正在工作。这就是为什么我在回答中也提到要分享解决这个问题的好方法。