替换Google Map的setOnInfoWindowClickListener接口方法中的片段时UI挂起



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

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

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,它将<marker,storedata>标记作为键,将storedata(我的自定义类对象)作为值

在onInfoWindowClick上,我正在根据hashmap()的键获取存储数据的实例。它运行良好,但

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

我的UI挂起了。有什么问题

我解决了这个问题。如果有人面临这个问题,请参阅。

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

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

它奏效了;

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

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

最新更新