ViewPager와 PagerAdapter를 사용하여 슬라이딩 뷰 만들기

11029 단어 ViewPagerAndroid

컨텐트


ViewPager와 PagerAdapter를 사용하여 오른쪽으로 왼쪽으로 이동하는 뷰 연습입니다.
Tab 마이그레이션도 포함되었습니다.

제작


아주 간단해요.쥐부터 멧돼지까지 끝.
숫자의 표시가 붕괴된 것을 용서해 주십시오.

득점


ViewPager 및 TabLayout 정의


중요한 내용은 아니지만 ViewGroup 및 TabLayout을 정의합니다.
activity_zodiac_pager.xml
<?xml version="1.0" encoding="utf-8"?>
<androidx.viewpager.widget.ViewPager
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/view_pager"
        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" />

</androidx.viewpager.widget.ViewPager>

PagerAdapter 설정


PagerAdapter를 ViewPager로 설정하여 뒤집기 뷰를 생성합니다.
adapter이기 때문에 RecyclerView입니다.약간 어댑터 같아.
PageAdapter는 세 가지 방법을 정의합니다.
  • getCount()
    총수를 얻다
  • getItem(position)
    지정된 위치에 있는 Fragment를 반환합니다
  • getPageTitle(position)
    지정한 위치에 있는 Tab용 디스플레이를 되돌려줍니다
  • FragmentPagerAdapter의 특징


    여기에는 FragmentPagerAdapter를 PageAdapter의 구현으로 사용합니다.
    역할은 대체로 같지만 Fragment StatePager Adapter도 있습니다.
    이러한 차이와 사용 방법은 다음과 같다.
    특징
    용도
    FragmentStatePagerAdapter
    앞뒤 페이지를 제외하고 메모리에서 폐기
    표시된 수량이 많은 물건
    FragmentPagerAdapter
    메모리가 제거되지 않았습니다.
    고정이 적은 것(Tab은 이쪽으로 묶을까요?)
    이번에는 12개가 고정되어 있어서 Fragment Pager Adapter를 사용했습니다.
    (12개는 다종설?)
    FragmentStatePagerAdapter에서 기본값은 앞뒤 페이지입니다setOffscreenPageLimit(int) 불러오기 전후의 페이지 수를 조정할 수 있습니다.
    ZodiacPagerActivity.kt
    class ZodiacPagerActivity : AppCompatActivity() {
    
        private lateinit var mViewPager: ViewPager
    
        override fun onCreate(savedInstanceState: Bundle?) {
            super.onCreate(savedInstanceState)
            setContentView(R.layout.activity_zodiac_pager)
    
            mViewPager = findViewById(R.id.view_pager)
    
            val fragmentManager = supportFragmentManager
            mViewPager.adapter = object : FragmentPagerAdapter(fragmentManager) {
                override fun getItem(i: Int): Fragment {
                    val fragment = ZodiacFragment()
                    fragment.arguments = Bundle().apply {
                        putInt(ARG_OBJECT, i)
                    }
                    return fragment
                }
    
                override fun getCount(): Int {
                    return 12
                }
    
                override fun getPageTitle(position: Int): CharSequence? {
                    return "${position + 1}"
                }
    
            }
        }
    }
    
    private const val ARG_OBJECT = "object"
    
    class ZodiacFragment : Fragment() {
    
        override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
            return inflater.inflate(R.layout.fragment_zodiac, container, false)
        }
    
        override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
            val textView: TextView = view.findViewById(R.id.zodiacText)
            val i = arguments?.getInt(ARG_OBJECT)
            textView.text = getAnimalName(i)
        }
    
        private fun getAnimalName(i: Int?): String {
            return when (i) {
                0 -> "子"
                1 -> "丑"
                2 -> "寅"
                3 -> "卯"
                4 -> "辰"
                5 -> "巳"
                6 -> "午"
                7 -> "未"
                8 -> "申"
                9 -> "酉"
                10 -> "戌"
                11 -> "亥"
                else -> "神"
            }
        }
    }
    

    참고 자료


    Create swipe views with tabs
    Android Programming: The Big Nerd Ranch Guide (3rd Edition) (Big Nerd Ranch Guides)

    좋은 웹페이지 즐겨찾기