android - 发生进程死亡时如何处理片段实例变量
问题描述
我正在关注这篇关于在 BottomNavigationView 中使用片段的 Medium 文章:
https://medium.com/@oluwabukunmi.aluko/bottom-navigation-view-with-fragments-a074bfd08711
但是作者并没有详细说明当 Process Death 发生时如何处理。我应该如何处理所有片段实例变量?因为在进程死亡后返回应用程序时我得到空指针。
public class MainActivity extends AppCompatActivity{
private Fragment currentBottomNavFragment;
private FragmentHome fragmentHome;
private FragmentSearch fragmentSearch;
private FragmentProfile fragmentProfile;
}
编辑 1:______________________________
case R.id.bottomnav_home:
Log.d(TAG, "onNavigationItemSelected: " + fragmentHome);
fragmentHome = (FragmentHome) getSupportFragmentManager()
.findFragmentByTag("FRAGMENT_HOME");
if (fragmentHome == null) {
fragmentHome = new FragmentHome();
getSupportFragmentManager().beginTransaction()
.add(R.id.main_fragment_container, fragmentHome, "FRAGMENT_HOME")
.commit();
}else {
Log.d(TAG, "onNavigationItemSelected: Fragment home not null");
Log.d(TAG, "onNavigationItemSelected: " + fragmentHome);
}
return true;
当我模拟进程死亡并点击主页导航视图时,第一个 log.d
Log.d(TAG, "onNavigationItemSelected: " + fragmentHome);
返回一个空的fragmentHome,但是if else 语句将转到else,这意味着fragmentHome 不为空。为什么我会遇到这个问题?
解决方案
处理这种情况的安全方法是在尝试自己添加之前尝试通过其唯一标签获取 Fragment。
fragment = supportFragmentManager.findFragmentByTag("someTag");
if(fragment == null) {
fragment = new MyFragment();
supportFragmentManager.beginTransaction().add(fragment, R.id.container, "someTag");
}
推荐阅读
- javascript - 合并两个音频/webm blob
- python - 使用python通过打印机打印csv
- angular - ngb timepicker 与 [{ngModel}] 在 ngFor 循环中更新 timepicker 的所有输入,因为所有 timepicker 具有相同的 ngmodel 绑定
- postgresql - 从 docker-compose 文件连接到 Postgres docker 容器
- python - 结合一些行的两个csv的削减
- javascript - 引导表 4 图标未正确显示
- python - 在 keras 中从 pytorch 实现 BCEWithLogitsLoss
- python - SQLAlchemy:通过多态子类过滤现有查询(相当于`.of_type()`,但对于`session.query()`)
- python - 再次加载数据后如何使QTableView刷新背景颜色
- html - 粘在没有滚动的页面上