В таблице Android нет заголовков вкладок после сопряжения с viewpager

#android #android-viewpager #android-tablayout

#Android #android-viewpager #android-tablayout

Вопрос:

Я просто пытаюсь выполнить сопряжение с TabLayout с ViewPager. Сопряжение почти работает, однако после этого Tabtexts исчезли.

Макет:

             <android.support.design.widget.TabItem
                android:id="@ id/group_tab_orders"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"

                android:text="@string/orders"/>

            <android.support.design.widget.TabItem
                android:id="@ id/group_tab_members"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="@string/members"/>

            <android.support.design.widget.TabItem
                android:id="@ id/group_tab_meals"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="@string/meals"/>

        </android.support.design.widget.TabLayout>

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

Код:

 tabLayout = (TabLayout) rootView.findViewById(R.id.group_tablayout);
    viewPager = (ViewPager) rootView.findViewById(R.id.group_viewpager);

    reference = FirebaseDatabase.getInstance().getReference("groups").child(getArguments().getString("key"));

    viewPager.setAdapter(new GroupContentAdapter(getFragmentManager(), reference));
    tabLayout.setupWithViewPager(viewPager);
  

Я также понял, что при удалении by viewPager.setAdapter(new GroupContentAdapter(getFragmentManager(), reference)); заголовки не будут изменены, поэтому вот код для адаптера

GroupContentAdapter.java

 public class GroupContentAdapter extends FragmentPagerAdapter {

public static int SIZE = 3;

private GroupContentFragment[] contents;
private DatabaseReference reference;


public class GroupContentAdapter extends FragmentPagerAdapter {

public static int SIZE = 3;

private GroupContentFragment[] contents;
private DatabaseReference reference;


public GroupContentAdapter(FragmentManager manager, DatabaseReference reference) {
    super(manager);
    this.reference = reference;
    contents = new GroupContentFragment[SIZE];
    contents[0] = GroupContentFragment.newInstance(reference.child(Utils.GROUPORDERS), ContentType.ORDERS);
    contents[1] = GroupContentFragment.newInstance(reference.child(Utils.GROUPMEMBERS), ContentType.MEMBERS);
    contents[2] = GroupContentFragment.newInstance(reference.child(Utils.GROUPMEALS), ContentType.MEALS);
}

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

@Override
public Fragment getItem(int position) {
    return contents[position];
}
  

}

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

1. IIRC TabLayout извлекает заголовки вкладок из метода PagerAdapter with getPageTitle() , поэтому вам нужно будет переопределить этот метод в вашем GroupContentAdapter , чтобы вернуть правильные заголовки.

2. @MikeM. Это один из способов заставить его работать. Спасибо.

Ответ №1:

Вам необходимо переопределить getPageTitle( ) метод FragmentPageAdapter. смотрите здесь

Ответ №2:

Внутри класса адаптера добавьте следующее:

 @Override
public CharSequence getPageTitle(int position) {
    if (position == 0)
        return "Text1";
    else
        return "Text2";
}
  

И внутри MainActivity я добавил следующее внутри onCreate :

 @Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    // Add a View Pager with its settings
    viewPager = (ViewPager) findViewById(R.id.pager);
    FragmentManager fragmentManager = getSupportFragmentManager();
    viewPager.setAdapter(new MyAdapter(fragmentManager));

    pageIndicatorView = (PageIndicatorView) findViewById(R.id.pageIndicatorView);
    pageIndicatorView.setViewPager(viewPager);

    // Add toolbar with its settings
    toolbar = (Toolbar) findViewById(R.id.toolbar);
    toolbar.setTitle("Custom Title");
    setSupportActionBar(toolbar);

    // Add tabLayout and link it to the ViewPager.
    tabLayout = (TabLayout) findViewById(R.id.tablayout);
    tabLayout.setupWithViewPager(viewPager);
    tabLayout.getTabAt(0).setIcon(R.drawable.image1);
    tabLayout.getTabAt(1).setIcon(R.drawable.image2);
}
  

И вот как вы будете добавлять значки после того, как они исчезнут вместе с текстом.

Желаю, чтобы этот ответ помог.