Я пытаюсь заполнить TabLayout
ViewPager
, но, к сожалению, он не заполняется.
Я следовал этому руководству, чтобы связаться: TabLayout и ViewPager в вашем приложении для Android . В этом руководстве используется старая библиотека поддержки версии 4. Мой проект основан на AndroidX, и я хочу остаться с ним. Официальная документация из TabLayout
говорит, что мне нужно создать TabLayout
внутри ViewPager
, но это совсем не работает. Поэтому я создал следующий XML-файл макета :
<LinearLayout
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<androidx.viewpager.widget.ViewPager
android:id="@+id/viewpager"
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"
android:background="@color/primaryColor"
app:tabGravity="fill"
app:tabMode="fixed"
app:tabTextColor="@color/primaryTextColor" />
</androidx.viewpager.widget.ViewPager>
</LinearLayout>
I настроить ViewPager со следующими строками для соединения TabLayout
с ViewPager
:
public class MyActivity extends AppCompatActivity {
...
@Override
public void onCreate(final Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.my_layout);
...
// tab layout
ViewPager viewPager = findViewById(R.id.viewpager);
MyFragmentPagerAdapter adapter = new MyFragmentPagerAdapter(this, getSupportFragmentManager());
viewPager.setAdapter(adapter);
TabLayout tabLayout = findViewById(R.id.tab_layout);
tabLayout.setupWithViewPager(viewPager);
...
}
...
}
Мой Адаптер является FragmentPagerAdapter
public class MyFragmentPagerAdapter extends FragmentPagerAdapter {
private Context context;
public MyFragmentPagerAdapter(Context context, FragmentManager fm) {
super(fm);
this.context = context;
}
@Override
public Fragment getItem(int position) {
if (position == 0) {
return new MyFragment1();
} else {
return new MyFragment2();
}
}
@Override
public int getCount() {
return 2;
}
@Nullable
@Override
public CharSequence getPageTitle(int position) {
switch (position) {
case 0:
return context.getString(R.string.building);
case 1:
return context.getString(R.string.buff);
default:
return null;
}
}
}
Один из моих Fragment
выглядит следующим образом:
public class MyFragment1 extends Fragment {
public MyFragment () {
// Required empty public constructor
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
return inflater.inflate(R.layout.fragment_building, container, false);
}
}
Вот картинка как это выглядит:
Пустой ViewPager
Вопрос
Так почему же TabLayout
не заселен вообще? Я работаю с Android Studio и Менеджер дизайна просто показывает мне пустые TabLayout
и ViewPager
. Я думаю, это прекомпилирует TabLayout
, но он просто пуст ...
Пожалуйста, помогите мне, потому что я застрял в этой теме. Я действительно хочу кодировать это так, чтобы получить выгоду от перелистывания вкладок и прочего.
Большое спасибо!