java在底部导航器上处理rotate,在片段上导航
我仍然没有得到这个部分,我正在尝试确保我的实例在rotate上保存一次,以便进行良好的实践,但我已经用尽了所有的知识,我旋转的所有内容都导航回主堆栈,这是第一个片段。请看我的代码,告诉我我做错了什么
作为一名自学成才的Android开发者可能会很有挑战性,但我很欣赏这个网站
private final BottomNavigationView.OnNavigationItemSelectedListener mOnNavigationItemSelectedListener
= item -> {
List<Fragment> fragments = getSupportFragmentManager().getFragments();
boolean isOnStack = false;
switch (item.getItemId()) {
case R.id.action_transactions:
fragment = new TransactionsFragment();
for(Fragment frag:fragments){
/* Check if fragment is on stack*/
if(frag instanceof TransactionsFragment){
isOnStack = true;
break;
}
}
break;
case R.id.action_budget:
fragment = new BudgetFragment();
for(Fragment frag:fragments){
/* Check if fragment is on stack*/
if(frag instanceof BudgetFragment){
isOnStack = true;
break;
}
}
}
break;
}
/*
Prevent duplicate record on back stack and keep consistent back navigation
*/
if (!isOnStack)
getSupportFragmentManager().beginTransaction()
.replace(R.id.content, fragment, TAG)
.addToBackStack(null)
.commit();
return true;
};
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putInt(SELECTED_ITEM_POSITION,mPosition);
}
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
mPosition = savedInstanceState.getInt(SELECTED_ITEM_POSITION);
}
# 1 楼答案
为此,需要使用
.findFragmentByTag
,首先检查片段是否为null。尝试将此代码添加到onCreate方法中全球的
私有片段
# 2 楼答案
如果您的问题是未保存数据,请检查以下代码:
保存状态时,需要先存储数据,然后再调用super方法。当您调用super方法时,您正在保存数据。在您的情况下,您正在保存捆绑包,然后再放入一些数据
用这个替换你的代码(注意我刚刚更新了你的代码)