android - 使用底部导航栏防止片段刷新
问题描述
我有以下底部导航栏代码可以在 3 个片段之间切换:
public class MainActivity extends AppCompatActivity {
private BottomNavigationView.OnNavigationItemSelectedListener mOnNavigationItemSelectedListener
= new BottomNavigationView.OnNavigationItemSelectedListener() {
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem item) {
Fragment fragment = null;
switch (item.getItemId()) {
case R.id.navigation_home:
fragment = new HomeFragment();
break;
case R.id.navigation_dashboard:
fragment = new DashboardFragment();
break;
case R.id.navigation_notifications:
fragment = new NotificationsFragment();
break;
}
return loadFragment(fragment);
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
loadFragment(new HomeFragment());
BottomNavigationView navigation = (BottomNavigationView) findViewById(R.id.navigation);
navigation.setOnNavigationItemSelectedListener(mOnNavigationItemSelectedListener);
}
private boolean loadFragment(Fragment fragment) {
//switching fragment
if (fragment != null) {
getSupportFragmentManager()
.beginTransaction()
.replace(R.id.fragment_container, fragment)
.commit();
return true;
}
return false;
}
}
在片段中有带有列表的 RecyclerViews。每次我在选项卡之间(片段之间)切换时,看起来片段被重新加载,并且列表跳到顶部。我想防止重新加载,以便用户在切换片段之前留在他查看的列表中的同一个位置
解决方案
问题是您每次都在创建一个新实例。您可以像这样缓存实例:
private Fragment mHomeFragment = new HomeFragment();
private Fragment mDashboardFragment = new DashboardFragment();
private Fragment mNotificationsFragment = new NotificationsFragment();
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem item) {
Fragment fragment = null;
switch (item.getItemId()) {
case R.id.navigation_home:
fragment = mHomeFragment;
break;
case R.id.navigation_dashboard:
fragment = mDashboardFragment;
break;
case R.id.navigation_notifications:
fragment = mNotificationsFragment;
break;
}
return loadFragment(fragment);
}
推荐阅读
- excel - 将电子表格的一半格式化为红色,并填写到最后一行
- javascript - 如何按键分组对象并修改reduce函数返回的数组?
- postgresql - 错误:无法创建复制槽“my_subscription”:错误:逻辑解码需要 wal_level >= 逻辑
- tensorflow - 权重未使用 Gradient Tape 和 apply_gradients() 更新
- flutter - 在颤振中导入我的公共记录器实现时,不要从另一个包中导入实现文件
- windows - .exe 文件如何通过命令提示符从文件中读取指令?
- php - 当我推送到 gitlab 时,为什么我的文件管理器中的文件夹存储 unisharp?
- javascript - 无法摆脱三个js画布中的白色轮廓
- spring-boot - thymeleaf spring-boot 我有一个有记录集的表格我如何根据用户偏好一次创建 1 个集
- css - 如何更改 React 的 Array().fill().map 中特定元素的样式