所以我有一个片段活动,其中我有一个 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));
所以我知道提交是异步的,并且根据调用 executePendingTransactions() 的文档应该等待事务完成。但它不起作用,地图仍然为空。仅当我将此代码包装在处理程序中时它才有效: handler = new Handler(); handler.post(新可运行(){
@Override
public void run() {
map = mapFragment.getMap();
// map.setOnCameraChangeListener(this);
map.setMyLocationEnabled(true);
map.moveCamera(CameraUpdateFactory.zoomTo(18));
}
});
我知道这应该将代码放入队列中,但实际上我似乎并不能保证处理程序在映射完成后肯定会执行它的代码,所以我觉得在某些情况下它仍然可能为空。我想通过回调或等待交易完成来做到这一点。
有没有办法做到这一点,而不扩展 SupportMapFragment 类,并添加监听器和回调?片段交易在某处有回调吗?或者 executePendingTransactions() 不起作用的原因是什么?
编辑:我检查了executePendingTransactions 是否返回true,它说有待处理的交易。我不明白为什么它不执行它们。