我正在更新当前显示的视图,并且我隐藏/显示两个片段。
FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction();
if (mTaxLocationListViewFrag.isVisible()) {
if (mGoogleMapFrag == null) {
mGoogleMapFrag = new GoogleMapFragment();
fragmentTransaction.add(R.id.fragment_container, mGoogleMapFrag);
}
fragmentTransaction.hide(mListViewFrag);
fragmentTransaction.show(mGoogleMapFrag).commit();
} else {fragmentTransaction.hide(mGoogleMapFrag).show(mListViewFrag).commit();
}
updateDisplay();
updateDisplay方法 -
if (mListViewFrag != null && mListViewFrag.isVisible()) {
Log.d(TAG, "Update Location ListView");
mListViewFrag.setLocations(mLocations);
}
if (mGoogleMapFrag != null && mGoogleMapFrag.isVisible()) {
Log.d(TAG, "Update Google Maps Markers");
//Convert locations to markers to display.
}
问题是我猜测fragmentTransaction
在执行.show
和.hide
时是异步的,并且updateDisplay无法正常工作,因为它认为要隐藏的片段仍在显示。有没有更可靠的方法来检查要更新的片段?
答案 0 :(得分:1)
添加片段后添加fragmentTransaction.executePendingTransactions()
。来自executePendingTransactions()的文档:
计划在进程的主线程上异步执行。 如果您想立即执行任何此类待处理操作,那么您 可以调用此函数(仅从主线程)来执行此操作。注意 所有回调和其他相关行为都将在此内完成 打电话,所以要小心从哪里调用。