TabHost: первая загруженная вкладка остается в фоновом режиме после переключения вкладок - PullRequest
0 голосов
/ 13 июня 2018

РЕДАКТИРОВАТЬ: То же самое происходило, когда я использовал TabLayout + ViewPager.


Один из моих фрагментов имеет TabHost с 4 вкладками.Следующее происходит только при активной темной теме (AppCompatDelegate.MODE_NIGHT_YES).

Когда фрагмент отображается в первый раз, и я меняю вкладку, возникает побочный эффект, и первая вкладка остается на заднем плане:

enter image description here

Неважно, какая вкладка используется по умолчанию, а какая нажимается после - любая комбинация вызывает это:

enter image description here

enter image description here

Когда я выхожу из фрагмента и возвращаюсь, это нормально.

Это дерево компонентов: enter image description here

Я настроил TabHost так:

    TabHost host = view.findViewById(R.id.tabHost);
    host.setup();

    TabHost.TabSpec spec = host.newTabSpec("one");
    spec.setContent(R.id.tab1);
    spec.setIndicator("", getResources().getDrawable(R.drawable.outline_info_white_24));
    host.addTab(spec);

    //Tab 2
    spec = host.newTabSpec("two");
    spec.setContent(R.id.tab2);
    spec.setIndicator("", getResources().getDrawable(R.drawable.outline_account_balance_white_24));
    host.addTab(spec);

    //Tab 3
    spec = host.newTabSpec("three");
    spec.setContent(R.id.tab3);
    spec.setIndicator("", getResources().getDrawable(R.drawable.outline_notifications_none_white_24));
    host.addTab(spec);

    //Tab 4
    spec = host.newTabSpec("four");
    spec.setContent(R.id.tab4);
    spec.setIndicator("", getResources().getDrawable(R.drawable.outline_public_white_24));
    host.addTab(spec);

Что вызывает это и какреши это?Похоже, что первая загруженная вкладка остается в фоновом режиме.

Ответы [ 4 ]

0 голосов
/ 27 июня 2018

Да ... Я тоже сталкиваюсь с этой проблемой.

Вы должны попытаться добавить макет, который вам нужен, чтобы накачать (заменить) макет, а не добавить.если вы добавляете, то, когда вы проводите макет, добавьте другой макет в текущий макет.просто замените макет.

 FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
        ft.replace(R.id.main, onlinesong_home); //this line
        ft.commit();

Удачного кодирования !!!

0 голосов
/ 25 июня 2018

Я не знаю, это ваша проблема с списком или нет.Но это мой код.Я использовал add (), он работает для меня.

public class MainActivity extends AppCompatActivity {

    private Toolbar toolbar;
    private TabLayout tabLayout;
    private ViewPager viewPager;

    @Override
    protected void attachBaseContext(Context newBase) {
        super.attachBaseContext(CalligraphyContextWrapper.wrap(newBase));
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        CalligraphyConfig.initDefault(new CalligraphyConfig.Builder()
                .setDefaultFontPath("fonts/Raleway-Regular.ttf")
                .setFontAttrId(R.attr.fontPath)
                .build());

        setContentView(R.layout.activity_sales);
        toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);

        getSupportActionBar().setDisplayHomeAsUpEnabled(true);

        getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);

        viewPager = (ViewPager) findViewById(R.id.viewpager);
        setupViewPager(viewPager);

        tabLayout = (TabLayout) findViewById(R.id.tabs);
        tabLayout.setupWithViewPager(viewPager);
    }

    private void setupViewPager(ViewPager viewPager) {
        MainActivity.ViewPagerAdapter adapter = new MainActivity.ViewPagerAdapter(getSupportFragmentManager());
        adapter.addFragment(new ListFragment(), "List");
        adapter.addFragment(new NewListFragment(), "New");
        viewPager.setAdapter(adapter);
    }

    class ViewPagerAdapter extends FragmentPagerAdapter {
        private final List<Fragment> mFragmentList = new ArrayList<>();
        private final List<String> mFragmentTitleList = new ArrayList<>();

        public ViewPagerAdapter(FragmentManager manager) {
            super(manager);
        }

        @Override
        public Fragment getItem(int position) {
            return mFragmentList.get(position);
        }

        @Override
        public int getCount() {
            return mFragmentList.size();
        }

        public void addFragment(Fragment fragment, String title) {
            mFragmentList.add(fragment);
            mFragmentTitleList.add(title);
        }

        @Override
        public CharSequence getPageTitle(int position) {
            return mFragmentTitleList.get(position);
        }
    }
}
0 голосов
/ 26 июня 2018

Попробуйте установить белый или любой другой цвет в качестве атрибута android:background для корневого представления вашего фрагмента.Например:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@color/colorBlue">

<!--Rest of the layout-->

</RelativeLayout>

Здесь RelativeLayout является корневым представлением моего фрагмента.

Это должно решить вашу проблему.

0 голосов
/ 21 июня 2018

Я обнаружил проблему - мне нужно было заменить .add () на .replace () при открытии фрагмента.

См. этот ответ .

...