所以我有一个片段活动,其中有一个WorldFragment。 WorldFragment有一个MapFragment,顶部有一堆按钮。因此,MapFragment是一个嵌套片段。 MapFragment正在动态添加到WorldFragment中的FrameLayout。这是代码:
super.onCreateView(inflater, container, savedInstanceState);
View view = inflater.inflate(R.layout.fragment_world, container, false);
if (mapFragment == null){
mapFragment = new SupportMapFragment();
}
getChildFragmentManager().beginTransaction()
.replace(R.id.world_map_container, mapFragment)
.commit();
getChildFragmentManager().executePendingTransactions();
map = mapFragment.getMap();
// map.setOnCameraChangeListener(this);
map.setMyLocationEnabled(true);
map.moveCamera(CameraUpdateFactory.zoomTo(18));
所以我知道comits是异步的,并且基于调用executePendingTransactions()的文档应该等待事务完成。但它不起作用,地图仍为空。它仅在我将此代码包装在处理程序中时才有效: handler = new Handler(); handler.post(new Runnable(){
@Override
public void run() {
map = mapFragment.getMap();
// map.setOnCameraChangeListener(this);
map.setMyLocationEnabled(true);
map.moveCamera(CameraUpdateFactory.zoomTo(18));
}
});
我知道这应该把代码放在队列中,但我实际上似乎并没有保证处理程序在地图完成后肯定会执行它的代码,所以我觉得它在某些地方仍然可能是null案例。我想通过回调或等待事务完成来做到这一点。
有没有办法做到这一点,没有扩展SupportMapFragment类,并添加一个监听器和回调?片段事务在某处有回调吗?或者,为什么executePendingTransactions()不起作用?
编辑:我已经检查过executePendingTransactions是否返回true,并且它说有待处理的事务。我不明白为什么它不执行它们。