java - 在底部导航器上旋转处理,在片段上导航
问题描述
我仍然没有得到这部分,我试图确保我的实例在轮换时保存一次以进行良好的实践,但我已经用尽了我所有的知识,我轮换的所有内容都导航回主堆栈,这是第一个片段。请查看我的代码并告诉我我做错了什么。
作为一名自学成才的 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);
}
解决方案
如果您的问题是数据未保存,请检查以下代码:
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putInt(SELECTED_ITEM_POSITION,mPosition);
}
保存状态时,需要先保存数据,再调用super方法。当您调用 super 方法时,您正在保存数据。在您的情况下,您是在放置一些数据之前保存捆绑包。
用这个替换你的代码(注意我刚刚更新了你的代码)
@Override
public void onSaveInstanceState(Bundle outState) {
outState.putInt(SELECTED_ITEM_POSITION,mPosition); // put the values
super.onSaveInstanceState(outState); // then store the bundle
}
推荐阅读
- java - 文件扫描器:未报告的异常 FileNotFoundException;必须被抓住或宣布被扔掉
- r - 如何自动将一些系数相乘并添加到R中的数据框中?
- php - 使用 MULTIPLE Inputs 上传多个文件
- string - String vs Varchar Hive 查询性能
- sql - T-SQL 查询:查找最频繁的值对
- github - Jenkins - 如果从管道作业中发布新标签,则触发构建
- angular - 我的 Angular 6 http put 请求出现错误
- python - Pandas:使用 & 运算符过滤行不会减少 Dataframe
- sharepoint - Yammer iframe 身份验证重定向到 https://www.yammer.com/session/new 而不是让我登录
- html - 在标签中使用带有非 `.svg` 扩展名的 SVG 图像