Android. Глюк Ripple Effect в TabLayout с FloatingActionButton

274
19 октября 2017, 08:58

Имеется две вкладки, реализованные через TabLayout, ViewPager и Fragment. При отображении первой вкладки показывается кнопка FloatingActionButton. При переходе на вторую вкладку эта кнопка плавно скрывается.

Если тапать по заголовку первой вкладки, то наблюдается Ripple Effect. Однако, если тапнуть по заголовку второй вкладки, то этот эффект начинает отображаться, но не успевает закончиться. Он резко пропадает именно в момент когда полностью исчезает кнопка FAB.

Иногда при возврате на первую вкладку по тапу, этот эффект вовсе отсутствует. Это происходит от случая к случаю.

Подскажите, пожалуйста, как решить эту проблему? Возможно что-то с чем-то конфликтует?

...
public class MainActivity extends AppCompatActivity
    {
    FloatingActionButton fab;
    @Override
    protected void onCreate(Bundle savedInstanceState)
        {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);
        SectionsPagerAdapter sectionsPagerAdapter = new SectionsPagerAdapter(getSupportFragmentManager());
        ViewPager viewPager = (ViewPager) findViewById(R.id.my_container);
        viewPager.setAdapter(sectionsPagerAdapter);
        TabLayout tabLayout = (TabLayout) findViewById(R.id.my_tabs);
        tabLayout.setupWithViewPager(viewPager);
        fab = (FloatingActionButton) findViewById(R.id.my_fab);
        fab.setOnClickListener(new View.OnClickListener()
            {
            @Override
            public void onClick(View v)
                {
                ...
                }
            });
        // плавно убирает кнопку fab
        viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener()
            {
            @Override
            public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {}
            @Override
            public void onPageSelected(int position)
                {
                switch (position)
                    {
                    case 0: fab.show(); break;
                    case 1: fab.hide(); break;
                    }
                }
            @Override
            public void onPageScrollStateChanged(int state) {}
            });
        }
    private class SectionsPagerAdapter extends FragmentStatePagerAdapter
        {
        private SectionsPagerAdapter(FragmentManager fragmentManager)
            {
            super(fragmentManager);
            }
        // отображение определённого фрагмента
        @Override
        public Fragment getItem(int position)
            {
            switch (position)
                {
                case 0: return new Fragment1(); // отображаем содержимое фрагмента 1
                case 1: return new Fragment2(); // отображаем содержимое фрагмента 2
                default: return null;
                }
            }
        // общее количество вкладок
        @Override
        public int getCount()
            {
            return 2;
            }
        // заголовки вкладок
        @Override
        public CharSequence getPageTitle(int position)
            {
            switch (position)
                {
                case 0: return "ВКЛАДКА 1";
                case 1: return "ВКЛАДКА 2";
                }
            return null;
            }
        }
    }
READ ALSO
Set вне одного активити [требует правки]

Set вне одного активити [требует правки]

Можно ли данные из одной коллекции Set использовать в разных активити?

191
Приложение работает не на всех версиях android. Android Studio

Приложение работает не на всех версиях android. Android Studio

Запускается приложение вроде как на всем версиях андройда до API 15, как собственно и указал в манифестеНо вот есть одна проблема, когда нажимаю...

352
почему Java stack memory быстрее heap

почему Java stack memory быстрее heap

почему доступ к объектам в стэке быстрее чем к объектам вне стэка ?

299
Как создать список Node и передать его в другой класс? JavaFX

Как создать список Node и передать его в другой класс? JavaFX

Задача такова: нужно нарисовать 2 линии на Pane: Есть класс Locomotive в котором рисуются линии:

227