【发布时间】:2019-01-25 22:35:19
【问题描述】:
我有一个底部导航视图,其中包含 3 个项目,它们导航到 3 个不同的片段(片段只创建一次,它们的实例保存在 mainactivity 的 onSavedInstanceState() 中),并在其顶部有一个浮动操作按钮。
我们想在访问每个片段时更改Fab的图标,我们在挑选每个底部导航图标时尝试了每个底部导航图标的setImageResource()和.setImageDrawable()和.setImageDrawable()。
/**
* used to handle switching between fragments when a new navigation item is selected
*/
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem item) {
switch (item.getItemId()) {
case R.id.nav_tasks:
.........
loadFragment(tasksFragment);
mFab.setOnClickListener(mFabClickListenerTasks);
mFab.setImageDrawable(getResources().getDrawable(R.drawable.ic_add_task));
//2 tabs in 1 fragment
if (mTabLayout.getSelectedTabPosition() == 1)
mFab.hide();
else mFab.show();
break;
case R.id.nav_employees:
.......
loadFragment(employeesFragment);
mFab.setOnClickListener(mFabClickListenerEmployees);
mFab.setImageDrawable(getResources().getDrawable(R.drawable.ic_add_employee2));
mFab.show();
break;
case R.id.nav_departments:
.......
loadFragment(departmentsFragment);
mFab.setOnClickListener(mFabClickListenerDepartments);
mFab.setImageDrawable(getResources().getDrawable(R.drawable.ic_add_department));
mFab.show();
break;
}
item.setChecked(true);
return true;
}
void loadFragment(Fragment fragment) {
if (activeFragment == fragment)
return;
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
transaction.hide(activeFragment).show(fragment);
activeFragment = fragment;
transaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
if (activeFragment instanceof TasksFragment)
mFab.setImageResource(R.drawable.ic_add_task);
else if(activeFragment instanceof DepartmentsFragment)
mFab.setImageResource(R.drawable.ic_add_department);
else if(activeFragment instanceof EmployeesFragment)
mFab.setImageResource(R.drawable.ic_add_employee2);
transaction.commit();
}
这3个fragment主要是3个recyclerview,我们也在recyclerview滚动的时候隐藏了fab。
当从底部导航遍历片段时,fab drawable 将被正确设置,但在任何片段中,当我们滚动它时,它会保存此状态以便之后返回。
这会在转到另一个片段时删除 fab drawable,并使 fab 为空且没有可绘制图标。 我们如何解决这个问题?
【问题讨论】:
-
你最后找到解决办法了吗?
-
@maxoumime 不,我没有。
标签: android android-fragments bottomnavigationview floating-action-button