#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
withgetPageTitle()
, поэтому вам нужно будет переопределить этот метод в вашем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);
}
И вот как вы будете добавлять значки после того, как они исчезнут вместе с текстом.
Желаю, чтобы этот ответ помог.