Android 为什么findFragmentById返回调用replace FragmentLayout之前的旧片段?

Android 为什么findFragmentById返回调用replace FragmentLayout之前的旧片段?,android,android-fragments,Android,Android Fragments,为什么将片段从第一个(pageNews)更改为第二个(pageViewFromWeb)后,“findFragmentById”返回对第一个(pageNews)片段的引用 fTrans = getSupportFragmentManager().beginTransaction(); fTrans.add(R.id.frgmCont, pageNews); .... .... public void selectNews(String news_id) {

为什么将片段从第一个(pageNews)更改为第二个(pageViewFromWeb)后,“findFragmentById”返回对第一个(pageNews)片段的引用

   fTrans = getSupportFragmentManager().beginTransaction();
   fTrans.add(R.id.frgmCont, pageNews);
   ....
   ....    
   public void selectNews(String news_id) {
   // Toast.makeText(this, news_id, Toast.LENGTH_SHORT).show();
    fTrans = getSupportFragmentManager().beginTransaction();
    fTrans.replace(R.id.frgmCont, pageViewFromWeb);
    fTrans.commit();
    Fragment fragment = getSupportFragmentManager().findFragmentById(R.id.frgmCont);
    ...
}
布局:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity"
    android:paddingTop="10dp"
    android:background="#000">

    <FrameLayout
        android:id="@+id/frgmCont"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="#000000">
    </FrameLayout>

</RelativeLayout>
   fTrans = getSupportFragmentManager().beginTransaction();
   fTrans.add(R.id.frgmCont, pageNews);
   ....
   ....    
   public void selectNews(String news_id) {
   // Toast.makeText(this, news_id, Toast.LENGTH_SHORT).show();
    fTrans = getSupportFragmentManager().beginTransaction();
    fTrans.replace(R.id.frgmCont, pageViewFromWeb);
    fTrans.commit();
    Fragment fragment = getSupportFragmentManager().findFragmentById(R.id.frgmCont);
    ...
}

它的原因是
replace()
不会立即执行,但FragmentTransaction已安排。当您在替换片段后立即
findFragmentById()
时,它们尚未被替换…

有关详细信息,请参阅文档。commit()只是将事务安排在将来某个时间完成,不会立即阻塞或运行。你可以调查一下。
   fTrans = getSupportFragmentManager().beginTransaction();
   fTrans.add(R.id.frgmCont, pageNews);
   ....
   ....    
   public void selectNews(String news_id) {
   // Toast.makeText(this, news_id, Toast.LENGTH_SHORT).show();
    fTrans = getSupportFragmentManager().beginTransaction();
    fTrans.replace(R.id.frgmCont, pageViewFromWeb);
    fTrans.commit();
    Fragment fragment = getSupportFragmentManager().findFragmentById(R.id.frgmCont);
    ...
}