Как создавать tabitems, не имея их в файле .xml

#android

#Android

Вопрос:

Я хочу создать свои tabitems из tablayout, но вкладки не созданы в моем файле .xml. Я не знаю точно, где генерируются мои вкладки, но похоже, что это происходит в адаптере

Обычно вы создаете drawable для создания представлений, таких как кнопки, но могу ли я сделать это также для вкладок в TabLayout?

Мой MainActivity не создает TabItems при запуске, и я собираю данные только для фрагментов здесь

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

        recentCardItems = new ArrayList<>();
        followingCardItems = new ArrayList<>();

        //This method sets the views in the abstract class DrawerLayoutActivity
        setMenuLayoutElements(R.layout.activity_main, R.id.toolbar_main, R.id.drawer_layout_main);
        setCardAdapterToReviewList();
        configureFireStoreToLoadNewReviewsIntoList();
    }
  

Мой класс адаптера с вкладками «Все» и «Следующие»

 final int PAGE_COUNT = 2;
    private String tabTitles[] = new String[] { "All", "Following" };
    private Context context;
    private List<CardItem> cardItemsRecent;
    private List<CardItem> cardItemsFollowing;

    private RecyclerViewFragment fragmentRecent;
    private RecyclerViewFragment fragmentFollowing;

    public RecyclerFragmentAdapter(FragmentManager fm, Context context, List<CardItem> cardItemsRecent, List<CardItem> cardItemsFollowing) {
        super(fm);
        this.context = context;
        this.cardItemsRecent = cardItemsRecent;
        this.cardItemsFollowing = cardItemsFollowing;

        this.fragmentRecent = RecyclerViewFragment.newInstance(cardItemsRecent, R.layout.fragement_recyclerview_home, R.id.recyclerView);
        this.fragmentFollowing = RecyclerViewFragment.newInstance(cardItemsFollowing, R.layout.fragment_recyclerview_following, R.id.reyclerViewFollowing);
    }

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

    @Override
    public Fragment getItem(int position) {
        Fragment fragmentToReturn;
        switch (position)
        {
            case 0:
                fragmentToReturn = fragmentRecent;
                break;

            case 1:
                fragmentToReturn = fragmentFollowing;
                break;

            default:
                fragmentToReturn = null;
        }
        return fragmentToReturn;
    }
    
//this getPageTitle method seems like it generates the titles of my tabs
    @Override
    public CharSequence getPageTitle(int position) {
        // Generate title based on item position
        return tabTitles[position];
    }

    public RecyclerViewFragment getFragmentRecent() {
        return fragmentRecent;
    }

    public RecyclerViewFragment getFragmentFollowing() {
        return fragmentFollowing;
    }
  

Как показано здесь, в моем xml.файле нет tabitems

 <LinearLayout
            android:orientation="vertical"
            android:layout_width="match_parent"
            android:layout_height="match_parent">
            <android.support.design.widget.TabLayout
                android:id="@ id/sliding_tabs"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                app:tabMode="fixed" />

            <android.support.v4.view.ViewPager
                android:id="@ id/viewpager"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:layout_weight="1"/>

        </LinearLayout>
  

Также здесь, на этом изображении, вы можете это увидеть

выделенная область - это мой tablayout

Я ожидаю tabitem, которому я могу придать форму @drawable, поэтому он имеет пользовательский макет, например, белый фон или что-то в этом роде.

Это то, что показывает моя MainActivity на данный момент Домашняя страница

Ответ №1:

вы можете напрямую добавлять вкладки в tablayout, используя метод addTab.

     tabLayout = (TabLayout) findViewById(R.id.tabs);
    tabLayout.addTab(new TabLayout.newTab().setText("All"));
    tabLayout.addTab(new TabLayout.newTab().setText("Following"));
  

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

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