即使在添加addToBackStack和executePendingTransactions()之后,getBackStackEntryCount()也始终返回0

use*_*350 20 android fragmentmanager

我有两个活动A和B.活动A有一个mapFragment,我将它添加到backstack.当我从B回到Actvity A时,我希望片段显示的状态与我离开时相同.但getFragmentManager().getBackStackEntryCount()返回0.这是我的代码:

MapFragment mMapFragment = MapFragment.newInstance();
    FragmentTransaction fragmentTransaction = getFragmentManager().beginTransaction();
    mMapFragment.getMapAsync(this);
    fragmentTransaction.replace(R.id.container, mMapFragment);
    fragmentTransaction.addToBackStack(null);
    fragmentTransaction.commit();
    getFragmentManager().executePendingTransactions();
Run Code Online (Sandbox Code Playgroud)

从活动B返回时,我知道getBackStackEntryCount()的数量:

System.out.println("Number of entries in backstack "+ getFragmentManager().getBackStackEntryCount());
Run Code Online (Sandbox Code Playgroud)

这显示我0.

提前致谢.

Neo*_*gma 57

我有一个类似的问题,在我的情况下getFragmentManager().getBackStackEntryCount()总是返回零.

我的问题是我使用了支持片段:

Fragment fragment = new MyFragment();
// note getSupportFragmentManager() instead getFragmentManager()
FragmentManager fragmentManager = getSupportFragmentManager();
fragmentManager.beginTransaction()
.replace(R.id.frame, fragment)
.addToBackStack(null)
.commit();

fragmentManager.executePendingTransactions();
Run Code Online (Sandbox Code Playgroud)

我检查getFragmentManager() backStackEntryCount,总是返回零(它使用另一个片段管理器):

@Override
public void onBackPressed() {
    if (getFragmentManager().getBackStackEntryCount() > 0 ) {
        getFragmentManager().popBackStack();            
    }
}
Run Code Online (Sandbox Code Playgroud)

而不是getSupportFragmentManager,返回正确的数字:

@Override
public void onBackPressed() {
    if (getSupportFragmentManager().getBackStackEntryCount() > 0 ) {
        getSupportFragmentManager().popBackStack();         
    }
}
Run Code Online (Sandbox Code Playgroud)


apm*_*991 3

尝试这个:

MapFragment mMapFragment = MapFragment.newInstance();
    FragmentTransaction fragmentTransaction = getFragmentManager().beginTransaction();
    mMapFragment.getMapAsync(this);
    fragmentTransaction.add(R.id.container, mMapFragment);
    fragmentTransaction.addToBackStack(null);
    fragmentTransaction.commit();
    getFragmentManager().executePendingTransactions();
Run Code Online (Sandbox Code Playgroud)

我改变了这一行:

fragmentTransaction.replace(R.id.container, mMapFragment);
Run Code Online (Sandbox Code Playgroud)

对此:

fragmentTransaction.add(R.id.container, mMapFragment);
Run Code Online (Sandbox Code Playgroud)

很确定如果您替换了一个片段,那么它就不会出现在后台堆栈中:)