Значок не отображается в FloatingActionButton после программного изменения - PullRequest
0 голосов
/ 03 февраля 2019

У меня есть AppCompatActivity с TabLayout и FloatingActionButton, которые я меняю, это значки в зависимости от того, какая вкладка отображается в данный момент.

Когда я программно изменяю рисунок FloatingActionButton, используя setImageDrawable или setImageResource, новый значок не отображается, только пустой фон кнопки.

Как ни странно,если я скрываю и показываю FloatingActionButton после того, как я программно изменил его значок, он появляется.

Это часть, где я меняю значок:

mViewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tabLayout) {
        @Override
        public void onPageSelected(int position) {
            super.onPageSelected(position);
            switch (position) {
                case 0: 
                    floatingActionButton.setImageDrawable(ContextCompat.getDrawable(mMainActivity, R.drawable.ic_save_24dp));
                    if (!floatingActionButton.isShown()) floatingActionButton.show(); 
                    mNavigationView.getMenu().getItem(1).setChecked(true);
                    break;
                case 1: 
                    floatingActionButton.setImageDrawable(ContextCompat.getDrawable(mMainActivity, R.drawable.ic_add_24dp));
                    if (!floatingActionButton.isShown()) floatingActionButton.show(); 
                    mNavigationView.getMenu().getItem(2).setChecked(true);
                    break;
                case 2: 
                    floatingActionButton.hide(); 
                    mNavigationView.getMenu().getItem(3).setChecked(true);
                    break; 
            }
        }
    });

До:

before

После того, как я программно изменил его на вектор «плюс»:

result

Ожидается:

expected

Итак, мой вопрос: что является причиной этого и как его можно решить?

1 Ответ

0 голосов
/ 11 июня 2019

У меня тоже была эта проблема, и я решил, добавив вызов метода hide

 mFloatingActionButton.setImageDrawable(getDrawable(R.drawable.default_fab_icon));
 mFloatingActionButton.hide();
 mFloatingActionButton.show();

Я пытался .invalidate(), но это не сработало.Это кажется проблемой при переключении фрагментов.Я испытал это, когда использовал компоненты Navigation AndroidX.

Не думаю, что это лучшее решение, но я много пробовал, и только это сработало - мерцания не было.

...