单击后退按钮时,屏幕显示上一个片段,但操作栏中的选定选项卡没有改变,所以我可能必须在 onBackStackChanged 中设置选定的片段对吗?
但是,它不起作用,当我切换到其他选项卡时,应用程序会冻结。似乎它被同时选择了多次,因为当我记录它时,backstack 被多次更改得非常快。
我已经知道为什么会结冰了。当我设置选定的导航项时,它会再次调用 onTabSelected() ,这又会调用 backStackChanged ,这又会重复。那么如何选择要下划线的选项卡,而无需重新选择选项卡?
@Override
public void onTabSelected(Tab tab, FragmentTransaction ft){
FragmentManager manage = getSupportFragmentManager();
manage.addOnBackStackChangedListener(new OnBackStackChangedListener(){
@Override
public void onBackStackChanged() {
if(actionBar.getSelectedTab().equals(tabRed))
actionBar.setSelectedNavigationItem(2);
if(actionBar.getSelectedTab().equals(tabBlue))
actionBar.setSelectedNavigationItem(1);
if(actionBar.getSelectedTab().equals(tabMatches))
actionBar.setSelectedNavigationItem(0);
}
});
if(tab.equals(tabComp))
{
ft.setCustomAnimations(R.anim.animation_fragment_out, R.anim.animation_fragment_switch);
trans = getSupportFragmentManager().beginTransaction();
trans.replace(android.R.id.content, teamsFrag);
trans.addToBackStack(null);
trans.commit();
}
else if(tab.equals(tabRed))
{
ft.setCustomAnimations(R.anim.animation_fragment_out, R.anim.animation_fragment_switch);
trans = getSupportFragmentManager().beginTransaction();
trans.replace(android.R.id.content, redScorerFrag);
trans.addToBackStack(null);
trans.commit();
curTab = tabRed;
}