消失的fab图标导航片段更改

Moa*_*med 10 android android-fragments floating-action-button bottomnavigationview

我有一个底部导航视图,其中有3个项目导航到3个不同的片段(片段只创建一次,它们的实例保存在mainactivity的onSavedInstanceState()中),并在其上面有一个浮动操作按钮.

我们想要在访问每个片段时更改fab的图标,我们尝试了两个片段,setImageResource()并且.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();
}
Run Code Online (Sandbox Code Playgroud)

3个片段主要是3个回收者视图,我们还在recyclerview滚动时隐藏了fab.

当从底部导航遍历片段时,fab drawable将被正确设置,但是当我们滚动它时,在任何片段中保存此状态以在之后返回它.

当转到另一个片段时,这将移除fab drawable,并且在没有图标可绘制的情况下将fab留空.我们怎么解决这个问题?

Zia*_*abi 18

我有同样的问题,当活动进入的onPause那么的onResume我打电话setImageResourceFloatingActionButton.FAB图标正在消失.我的解决方案是在之后立即调用以下内容setImageResource

mFloatingActionButton.hide();        
mFloatingActionButton.show();
Run Code Online (Sandbox Code Playgroud)


MrS*_*lge 10

这是FloatingActionButton类中的一个错误:当调用show()时,imageMatrixScale设置为0.调用setImageResource()然后只显示空白.它在调用show()之前有效.

该错误已在设计库28.0.0中引入,它正在使用v27.1.1.下调至27.1.1

编辑:谷歌Issuetracker