Deepesh mhatre Ответов: 0

Как 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, но разбил фрагмент кода на отдельные классы.

0 Ответов