Slide 1

Slide 1 text

7JFX1BHFS1SFWJFX 4QFBLFS !PNKPPOLJN

Slide 2

Slide 2 text

3BJOJTU

Slide 3

Slide 3 text

-BZPVUNBOBHFSUIBUBMMPXTUIFVTFSUPGMJQMFGU BOESJHIUUISPVHIQBHFTPGEBUB :PVTVQQMZBOJNQMFNFOUBUJPOPGB1BHFS"EBQUFS UPHFOFSBUFUIFQBHFTUIBUUIFWJFXTIPXT

Slide 4

Slide 4 text

7JFX1BHFSSFQMBDFT7JFX1BHFS  BEESFTTJOHNPTUPGJUTQSFEFDFTTPSsTQBJOQPJOUT  JODMVEJOHSJHIUUPMFGUMBZPVUTVQQPSU WFSUJDBMPSJFOUBUJPO  NPEJGJBCMF'SBHNFOUDPMMFDUJPOT FUD

Slide 5

Slide 5 text

7JFX1BHFSSFQMBDFT7JFX1BHFS  BEESFTTJOHNPTUPGJUTQSFEFDFTTPSsTQBJOQPJOUT  JODMVEJOHSJHIUUPMFGUMBZPVUTVQQPSU WFSUJDBMPSJFOUBUJPO  NPEJGJBCMF'SBHNFOUDPMMFDUJPOT FUD

Slide 6

Slide 6 text

No content

Slide 7

Slide 7 text

7JFX1BHFSSFQMBDFT7JFX1BHFS  BEESFTTJOHNPTUPGJUTQSFEFDFTTPSsTQBJOQPJOUT  JODMVEJOHSJHIUUPMFGUMBZPVUTVQQPSU WFSUJDBMPSJFOUBUJPO  NPEJGJBCMF'SBHNFOUDPMMFDUJPOT FUD

Slide 8

Slide 8 text

✨✨✨✨ ✨IUUQTHJUIVCDPNHPPHMFTBNQMFTBOESPJEWJFXQBHFS✨ ✨✨✨✨

Slide 9

Slide 9 text

3JHIUUPMFGUMBZPVUTVQQPSU

Slide 10

Slide 10 text

3JHIUUPMFGUMBZPVUTVQQPSU 3FWFSTF"SSBZ PS 3PUBUF PS $VTUPN 7JFX1BHFS

Slide 11

Slide 11 text

3JHIUUPMFGUMBZPVUTVQQPSU 3FWFSTF"SSBZ PS 3PUBUF PS $VTUPN 7JFX1BHFS

Slide 12

Slide 12 text

3JHIUUPMFGUMBZPVUTVQQPSU 3FWFSTF"SSBZ PS 3PUBUF PS $VTUPN 7JFX1BHFS android:layoutDirection="rtl" 7JFX1BHFS

Slide 13

Slide 13 text

7FSUJDBM0SJFOUBUJPO

Slide 14

Slide 14 text

7FSUJDBM0SJFOUBUJPO 3PUBUF PS $VTUPN 7JFX1BHFS

Slide 15

Slide 15 text

7FSUJDBM0SJFOUBUJPO 3PUBUF PS $VTUPN 7JFX1BHFS

Slide 16

Slide 16 text

7FSUJDBM0SJFOUBUJPO 3PUBUF PS $VTUPN 7JFX1BHFS android:orientation=“vertical" or viewPager.orientation = ViewPager2.ORIENTATION_VERTICAL 7JFX1BHFS

Slide 17

Slide 17 text

.PEJGJBCMF'SBHNFOU$PMMFDUJPOT

Slide 18

Slide 18 text

7JFX1BHFS .PEJGJBCMF'SBHNFOU$PMMFDUJPOT

Slide 19

Slide 19 text

7JFX1BHFS .PEJGJBCMF'SBHNFOU$PMMFDUJPOT 'SBHNFOU

Slide 20

Slide 20 text

7JFX1BHFS .PEJGJBCMF'SBHNFOU$PMMFDUJPOT 'SBHNFOU 'SBNHFOU1BHFS"EBQUFS 'SBHNFOU4UBUF1BHFS"EBQUFS

Slide 21

Slide 21 text

7JFX1BHFS .PEJGJBCMF'SBHNFOU$PMMFDUJPOT 'SBHNFOU 'SBNHFOU1BHFS"EBQUFS 'SBHNFOU4UBUF1BHFS"EBQUFS OPUJGZ%BUBTFU$IBOHFE

Slide 22

Slide 22 text

7JFX1BHFS .PEJGJBCMF'SBHNFOU$PMMFDUJPOT 'SBHNFOU 'SBNHFOU1BHFS"EBQUFS 'SBHNFOU4UBUF1BHFS"EBQUFS 6O.PEJGJBCMFj OPUJGZ%BUBTFU$IBOHFE

Slide 23

Slide 23 text

.PEJGJBCMF'SBHNFOU$PMMFDUJPOT

Slide 24

Slide 24 text

.PEJGJBCMF'SBHNFOU$PMMFDUJPOT $BDIF

Slide 25

Slide 25 text

.PEJGJBCMF'SBHNFOU$PMMFDUJPOT $BDIF HFU*UFN

Slide 26

Slide 26 text

.PEJGJBCMF'SBHNFOU$PMMFDUJPOT $BDIF HFU*UFN 104*50/@/0/&

Slide 27

Slide 27 text

.PEJGJBCMF'SBHNFOU$PMMFDUJPOT $BDIF HFU*UFN 104*50/@/0/& %JSFDU

Slide 28

Slide 28 text

.PEJGJBCMF'SBHNFOU$PMMFDUJPOT $BDIF HFU*UFN 104*50/@/0/& %JSFDU 7JFX1BHFS

Slide 29

Slide 29 text

)PX 

Slide 30

Slide 30 text

5IFBOTXFSJT3FDZDMFS7JFX FUD ✨

Slide 31

Slide 31 text

)PXEJGGFSFOU 7JFX1BHFSDPNQPTJUJPO -PHJDGPS.BOBHJOH*UFNT 7JFXPS'SBHNFOU 1BHF$IBOHF$BMMCBDLT PO1BHF4DSPMMFE PO1BHF4FMFDUFE PO1BHF4DSPMM4UBUF$IBOHFE MPHJD -PHJDGPSGMJQQJOH &UDj USBOTGPSNFS TUPSFSFTUPSFj

Slide 32

Slide 32 text

)PXEJGGFSFOU 7JFX1BHFSDPNQPTJUJPO -PHJDGPSNBOBHJOH*UFNT 7JFXPS'SBHNFOU  1BHF$IBOHF$BMMCBDLTMPHJD -PHJDGPSGMJQQJOH &UDj USBOTGPSNFS TUPSFSFTUPSFj 3FDZDMFS7JFXXJUI-BZPVU.BOBHFS &UDj USBOTGPSNFS TUPSFSFTUPSFj 1BHF4OBQ)FMQFS 4DSPMM&WFOU"EBQUFS

Slide 33

Slide 33 text

)PXEJGGFSFOU DPNQMFYJUZ 7JFX1BHFS 7JFX1BHFS -JOFT WBSJBCMFT MJOFT WBSJBCMFT

Slide 34

Slide 34 text

)PXEJGGFSFOU BEBQUFS 7JFX1BHFS 7JFX1BHFS &YUFOET1BHFS"EBQUFS 'SBHNFOU1BHFS"EBQUFS 'SBHNFOU4UBUF"EBQUFS &YUFOET3FZDMFS7JFX"EBQUFS7) 'SBHNFOU4UBUF"EBQUFS

Slide 35

Slide 35 text

)PXEJGGFSFOU BEBQUFS 7JFX1BHFS 7JFX1BHFS &YUFOET1BHFS"EBQUFS 'SBHNFOU1BHFS"EBQUFS 'SBHNFOU4UBUF"EBQUFS &YUFOET3FZDMFS7JFX"EBQUFS7) 'SBHNFOU4UBUF"EBQUFS

Slide 36

Slide 36 text

#FUUFSQPJOUT3FDZDMFS7JFX  &BTZJNQMFNFOUBUJPO OPUOFFEJNQMFNFOUB.PSFJT7JFX'SPN0CKFDU JOTUBOUJBUF*UFN EFTUSPZ*UFN 4VQQPSU3FDZDMBCMF NPSFFGGJDJFOUMZ $MBSJGJFEVTBHF XIFODIPPTF7JFXPS'SBHNFOU

Slide 37

Slide 37 text

4P 

Slide 38

Slide 38 text

6TJOHXJUI7JFX viewPager.adapter = object : RecyclerView.Adapter() { override fun onCreateViewHolder( parent: ViewGroup, viewType: Int ): CardViewHolder { return CardViewHolder(CardView(layoutInflater, parent)) } override fun onBindViewHolder(holder: CardViewHolder, position: Int) { holder.bind(cards[position]) } override fun getItemCount(): Int { return cards.size } }

Slide 39

Slide 39 text

6TJOHXJUI'SBHNFOU viewPager.adapter = object : FragmentStateAdapter(supportFragmentManager,lifecycle) { override fun getItem(position: Int): PageFragment { val itemId = items.itemId(position) val itemText = items.getItemById(itemId) return PageFragment.create(itemText) } override fun getItemCount(): Int = items.size override fun getItemId(position: Int): Long = items.itemId(position) override fun containsItem(itemId: Long): Boolean = items.contains(itemId) }

Slide 40

Slide 40 text

'SBHNFOU4UBUF"EBQUFS public abstract class FragmentStateAdapter extends RecyclerView.Adapter implements StatefulAdapter public FragmentStateAdapter(@NonNull FragmentManager fragmentManager, @NonNull Lifecycle lifecycle) { mFragmentManager = fragmentManager; mLifecycle = lifecycle; super.setHasStableIds(true); }

Slide 41

Slide 41 text

'SBHNFOU4UBUF"EBQUFSDSFBUF @NonNull @Override public final FragmentViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { return FragmentViewHolder.create(parent); }

Slide 42

Slide 42 text

'SBHNFOU7JFX)PMEFS public final class FragmentViewHolder extends ViewHolder { private FragmentViewHolder(FrameLayout container) { super(container); } static FragmentViewHolder create(ViewGroup parent) { FrameLayout container = new FrameLayout(parent.getContext()); container.setLayoutParams( new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT)); container.setId(ViewCompat.generateViewId()); container.setSaveEnabled(false); return new FragmentViewHolder(container); } FrameLayout getContainer() { return (FrameLayout) itemView; } }

Slide 43

Slide 43 text

'SBHNFOU4UBUF"EBQUFSCJOE @Override public final void onBindViewHolder(final @NonNull FragmentViewHolder holder, int position) { final long itemId = holder.getItemId(); final int viewHolderId = holder.getContainer().getId(); final Long boundItemId = itemForViewHolder(viewHolderId); // item currently bound to the VH if (boundItemId != null && boundItemId != itemId) { removeFragment(boundItemId); mItemIdToViewHolder.remove(boundItemId); } mItemIdToViewHolder.put(itemId, viewHolderId); // this might overwrite an existing entry ensureFragment(position); ………………… }

Slide 44

Slide 44 text

'SBHNFOU4UBUF"EBQUFSCJOE @Override public final void onBindViewHolder(final @NonNull FragmentViewHolder holder, int position) { final long itemId = holder.getItemId(); final int viewHolderId = holder.getContainer().getId(); final Long boundItemId = itemForViewHolder(viewHolderId); // item currently bound to the VH if (boundItemId != null && boundItemId != itemId) { removeFragment(boundItemId); mItemIdToViewHolder.remove(boundItemId); } mItemIdToViewHolder.put(itemId, viewHolderId); // this might overwrite an existing entry ensureFragment(position); ………………… }

Slide 45

Slide 45 text

*LOPX

Slide 46

Slide 46 text

2)PXUPQSFWFOUVTFSTXJQJOH viewPager.isUserInputEnabled = false

Slide 47

Slide 47 text

2)PXUPJNQMFNFOUBOJNBUJPODIBOHJOH viewPager.setPageTransformer(Animator) public interface PageTransformer { void transformPage(@NonNull View page, float position); }

Slide 48

Slide 48 text

2)PXUPVTFXJUI5BC-BZPVU TabLayoutMediator(tabLayout, viewPager) { tab, position -> /* implement code */ }.attach() package com.example.androidx.viewpager2.TabLayoutMediator;

Slide 49

Slide 49 text

"OEj

Slide 50

Slide 50 text

,OPXO*TTVFT /PUTVQQPSUUBC-BZPVUPGGJDJBMMZ /PUTVQQPSUDMJQ5P1BEEJOH &UDj https://issuetracker.google.com/issues?q=viewpager2 JTTVFT /FTUFETDSPMMJOHQBSBMMFMUPPSJFOUBUJPO

Slide 51

Slide 51 text

4VNNBSZ

Slide 52

Slide 52 text

5IBOLZPV