确定要更新的片段

时间:2016-03-08 16:55:08

标签: java android android-fragments

我正在更新当前显示的视图,并且我隐藏/显示两个片段。

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无法正常工作,因为它认为要隐藏的片段仍在显示。有没有更可靠的方法来检查要更新的片段?

1 个答案:

答案 0 :(得分:1)

添加片段后添加fragmentTransaction.executePendingTransactions()。来自executePendingTransactions()的文档:

  

计划在进程的主线程上异步执行。   如果您想立即执行任何此类待处理操作,那么您   可以调用此函数(仅从主线程)来执行此操作。注意   所有回调和其他相关行为都将在此内完成   打电话,所以要小心从哪里调用。