Как viewpager и fragmentpageradapter работают вместе ?
Я знаю, что Viewpager вроде как не очень часто используется со времен Viewpager 2, но недавно я был нубом, изучающим Tablayout с фрагментами .
Я следил за несколькими блогами и учебниками и честно сказал, что понял 50%, а остальные 50% я понятия не имею.
Я могу понять другие части кода, такие как макет и MainACtivity, но я действительно не понимаю, как адаптер и Viepager тренируются в цикле.
В адаптере есть 2/3 методов, которые синхронизируются с Viewpager и прочее.
Я публикую свой код ниже.
(Я не публикую свои фрагменты , которые должны быть показаны в viewpager)
Приложение Содержит :
MainActivity.java
activity_main.xml
PageAdapter.java
(Код не указан для фрагментов)
3 названных фрагмента :
tab1_fragment , &ампер tab2_fragment; tab3_fragment.
--------------------------------------------------------------------------------------
MainActivity.java :
package com.deepesh.tabapp; import androidx.appcompat.app.AppCompatActivity; import androidx.viewpager.widget.ViewPager; import android.os.Bundle; import com.google.android.material.tabs.TabItem; import com.google.android.material.tabs.TabLayout; public class MainActivity extends AppCompatActivity { TabLayout tabLayout1; ViewPager viewPager1; TabItem tab1,tab2,tab3; PageAdapter pageAdapter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); tabLayout1 = findViewById(R.id.tablayout1); tab1 = findViewById(R.id.calltab1); tab2=findViewById(R.id.mailtab2); tab3=findViewById(R.id.smstab3); viewPager1 = findViewById(R.id.Viewpager1); pageAdapter=new PageAdapter(getSupportFragmentManager(),tabLayout1.getTabCount()); viewPager1.setAdapter(pageAdapter); tabLayout1.setOnTabSelectedListener(new TabLayout.OnTabSelectedListener() { @Override public void onTabSelected(TabLayout.Tab tab) { viewPager1.setCurrentItem(tab.getPosition()); if (tab.getPosition()==0 || tab.getPosition()==1 || tab.getPosition()==2 ){ pageAdapter.notifyDataSetChanged(); } } @Override public void onTabUnselected(TabLayout.Tab tab) { } @Override public void onTabReselected(TabLayout.Tab tab) { } }); viewPager1.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tabLayout1)); } }
Activity_main.xml :
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" xmlns:app="http://schemas.android.com/apk/res-auto" android:orientation="vertical" android:layout_height="match_parent" tools:context=".MainActivity"> <com.google.android.material.tabs.TabLayout android:id="@+id/tablayout1" android:layout_width="409dp" android:background="@color/colorPrimary" android:layout_height="wrap_content" app:tabSelectedTextColor="#ffff" app:tabIndicatorColor="#ffff" tools:layout_editor_absoluteX="1dp" tools:layout_editor_absoluteY="287dp"> <com.google.android.material.tabs.TabItem android:layout_width="wrap_content" android:text="Call" android:id="@+id/calltab1" android:layout_height="wrap_content"/> <com.google.android.material.tabs.TabItem android:layout_width="wrap_content" android:text="MAIL" android:id="@+id/mailtab2" android:layout_height="wrap_content"/> <com.google.android.material.tabs.TabItem android:layout_width="wrap_content" android:text="SMS" android:id="@+id/smstab3" android:layout_height="wrap_content"/> </com.google.android.material.tabs.TabLayout> <androidx.viewpager.widget.ViewPager android:layout_width="match_parent" android:layout_height="match_parent" android:id="@+id/Viewpager1" /> </LinearLayout>
PageAdapter.java :
пакет com.deepesh.по боулингу;
импорт androidx.аннотации.Значение, отличное от null;
импорт androidx.fragment.app.Fragment;
импорт androidx.fragment.app.FragmentManager;
импорт androidx.fragment.app.FragmentPagerAdapter;
открытый класс PageAdapter расширяет FragmentPagerAdapter {
int tabcount;
public PageAdapter(@NonNull FragmentManager fm, int behavior) {
супер(fm, поведение);
tabcount=поведение;
}
@NonNull
@Ручная коррекция
публичный фрагмент getItem(int position) {
положение переключателя){
случай 0: возврат нового tab1_fragment();
случай 1: возврат нового tab2_fragment();
случай 2: возврат нового tab3_fragment();
по умолчанию: return null;
}
}
@Ручная коррекция
public int getCount() {
return tabcount;
}
}
Что я уже пробовал:
Я много искал в интернете , но диндт нашел то, что искал.
Gerry Schmitz
Пытаться реализовать то, чего вы не понимаете, не имеет смысла. Один ищет решения проблем, а не наоборот.
David Crow
Большая часть кода здесь это не имеет никакого отношения к вашему квесту, но он действительно показывает чистый способ реализации двухпанельной панели ViewPager
Добавление дополнительных панелей-это тривиально.
Да, я начал с шаблонного проекта, созданного Android Studio, но разбил фрагмент кода на отдельные классы.