Fragment Activity があり、その中に 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() を呼び出すと、トランザクションが完了するまで待機する必要があることがわかります。しかし、うまくいきません。マップはまだ null です。このコードをハンドラーでラップした場合にのみ機能します。handler.post(new Runnable(){
@Override
public void run() {
map = mapFragment.getMap();
// map.setOnCameraChangeListener(this);
map.setMyLocationEnabled(true);
map.moveCamera(CameraUpdateFactory.zoomTo(18));
}
});
これによりコードがキューに入れられるはずですが、マップが完了した後にハンドラーがそのコードを確実に実行するという保証は実際にはないようです。コールバックを使用するか、トランザクションが完了するのを待ってこれを行いたいと思います。
SupportMapFragment クラスを拡張せずに、リスナーとコールバックを追加せずにこれを行う方法はありますか? フラグメント トランザクションにはどこかにコールバックがありますか? または、executePendingTransactions() が機能しない理由はありますか?
編集: executePendingTransactions が true を返すかどうかを確認しましたが、保留中のトランザクションがあると表示されています。なぜそれらを実行していないのかわかりません。