我在我的应用程序中使用谷歌地图并显示标记。
现在点击标记窗口我想用其他片段替换当前片段。
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());
}
}
});
}
我正在创建一个散列图,其中<marker,storedata>
标记作为键,而storageata(我的自定义类对象)作为值。
我基于hashmap()的键获取商店数据的实例。它运作良好,但
((BaseTabbarContainer) companyListFragment.getParentFragment()).replaceFragment(
storeDetails, true);
这里我的UI正在挂起。问题是什么
答案 0 :(得分:3)
我解决了这个问题。如果有任何人面临这个问题,请参考。
我所做的是创建一个处理程序,在一段时间后运行代码片段,并在调用处理程序后从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方法返回后解决?如果有任何想法请分享。
答案 1 :(得分:2)
我也面临这个问题,对我来说,我通过停止使用fragmentManager.executePendingTransactions()
来解决,如果我使用这一行替换片段然后它只是HANG,但没有这条线它没有任何问题。希望它对那些将面临类似问题的人有所帮助。感谢。