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)
尝试这个:
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)
很确定如果您替换了一个片段,那么它就不会出现在后台堆栈中:)