Android — Нет заголовков вкладок в TabLayout?

#android #tabs #android-viewpager

#Android #вкладки #android-viewpager

Вопрос:

Я создал таблицу с viewpager и 3 фрагментами. Когда я запускаю приложение, я могу правильно видеть все, кроме заголовков вкладок, которые не отображаются, чего мне не хватает?

Мой код в mainactivity.oncreate:

 tabLayout=findViewById(R.id.tab_layout);
        viewPager= findViewById((R.id.view_pager));
        final ViewPagerAdapter viewPagerAdapter= new ViewPagerAdapter(getSupportFragmentManager());
        viewPagerAdapter.addFragment(RulesFragment.getInstance(), "TREE RULES");
        viewPagerAdapter.addFragment(TreeFragment.getInstance(), "REGRESSION TREE");
        viewPagerAdapter.addFragment(PredictionFragment.getInstance(), "PREDICTION");
        rulesFragment= (RulesFragment) viewPagerAdapter.getItem(0);
        treeFragment= (TreeFragment) viewPagerAdapter.getItem(1);
        predictionFragment= (PredictionFragment) viewPagerAdapter.getItem(2);
        viewPager.setAdapter(viewPagerAdapter);
        tabLayout.setupWithViewPager(viewPager);
        viewPager.setOffscreenPageLimit(3);
  

.xml-файл:

 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent">


    <androidx.viewpager.widget.ViewPager
        android:id="@ id/view_pager"
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <com.google.android.material.tabs.TabLayout
            android:id="@ id/tab_layout"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            app:tabIndicatorAnimationDuration="1000"
            app:tabIndicatorColor="@android:color/holo_blue_dark"
            app:tabIndicatorGravity="top"
            app:tabSelectedTextColor="@android:color/holo_purple"
            app:tabTextColor="@android:color/white"
            app:tabBackground="@android:color/holo_orange_light">
        </com.google.android.material.tabs.TabLayout>
    </androidx.viewpager.widget.ViewPager>
</RelativeLayout>
  

Что я получаю:
введите описание изображения здесь

В .xml я добавил только viewpager и tablayout, я не добавлял никаких textview или других вещей для заголовков вкладок, так как думал, что это будет сделано автоматически с помощью TabLayout.setupWithViewPager (ViewPager). Разве это неправильно?

Комментарии:

1. Поделитесь XML-файлом.

2. Добавил его @bilal

Ответ №1:

Реализуйте getPageTitle внутри вашего ViewPagerAdapter!

Нравится-

  // Returns the page title for the top indicator
        @Override
        public CharSequence getPageTitle(int position) {
            return "Page "   position;
        }
  

Ссылка, которую вы можете проверить —

https://guides.codepath.com/android/viewpager-with-fragmentpageradapter

Кроме того, ваш ViewPagerAdapter не должен удерживать a List<Fragment> , поскольку это приведет к сбоям после завершения процесса в рабочей среде. Правильный способ реализации FragmentPagerAdapter:

 public class ViewPagerAdapter extends FragmentPagerAdapter {
    public ViewPagerAdapter(FragmentManager fragmentManager) {
        super(fragmentManager);
    }

    @Override
    public Fragment getItem(int position) {
        if(position == 0) return new RulesFragment();
        if(position == 1) return new TreeFragment();
        if(position == 2) return new PredictionFragment();

        throw new IllegalStateException("Unexpected position "   position);
    }

    @Override
    public int getCount() {
        return 3;
    }

    @Override
    public CharSequence getPageTitle(int position) {
        if(position == 0) return "TREE RULES";
        if(position == 1) return "REGRESSION TREE";
        if(position == 2) return "PREDICTION";
      
        throw new IllegalStateException("Unexpected position "   position);
    }
}
  

Чтобы получить ссылку на фрагмент, созданный ViewPager, используйте следующую findFragmentByTag схему:

 Fragment fragment = supportFragmentManager.findFragmentByTag("android:switcher:"   viewPager.getId()   ":"   fragmentPosition)
  

Комментарии:

1. Большое вам спасибо! Я уже переопределил его, но вернул пустую строку, потому что мне нужно было ее отредактировать, но я забыл: D