• 카테고리

    질문 & 답변
  • 세부 분야

    모바일 앱 개발

  • 해결 여부

    미해결

View cannot be cast to androidx.viewpager.widget.ViewPager

20.12.02 20:38 작성 조회수 367

0

제목과 같은 에러가 뜨네요..

일단 코딩 자체는 선생님과 똑같이 했습니다.

문제가 발생하는 곳은 adapter를 지정하는 부분인데요...

보아하니 처음에 ArrayList로 <View>를 지정해주는데 

여기 있는 View가 ViewPager를 호환하지 않는거 같은 느낌이네요...

아래는 제가 코딩한 MainActiviy.kt입니다.

ps. 그리고 뷰페이저2에 대한 강의도 있나요?

package com.example.viewpager

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.view.View
import android.view.ViewGroup
import androidx.viewpager.widget.PagerAdapter
import kotlinx.android.synthetic.main.activity_main.*

class MainActivity : AppCompatActivity() {

    // 1. ViewPater를 통해 보여줄 View를 담을 List
    val viewList = ArrayList<View>()

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        // 2. layoutInflater.inflate : 레이아웃을 하나의 뷰로 만들어준다
        val view1 = layoutInflater.inflate(R.layout.view1, null)
        val view2 = layoutInflater.inflate(R.layout.view2, null)
        val view3 = layoutInflater.inflate(R.layout.view3, null)
        val view4 = layoutInflater.inflate(R.layout.view1, null)
        val view5 = layoutInflater.inflate(R.layout.view2, null)
        val view6 = layoutInflater.inflate(R.layout.view3, null)

        // 3. ArrayList에 뷰를 하나씩 추가
        viewList.add(view1)
        viewList.add(view2)
        viewList.add(view3)
        viewList.add(view4)
        viewList.add(view5)
        viewList.add(view6)

        val adapter1 = object : PagerAdapter(){
            // 4. ViewPager가 보여줄 view의 갯수
            override fun getCount(): Int {
                return viewList.size
            }

            // 5. ViewPager가 보여줄 view를 반환
            override fun instantiateItem(container: ViewGroup, position: Int): Any {
                pager1.addView(viewList[position])
                return viewList[position]
            }

            // 6. instantiateItem이 반환한 객체를 화면으로 사용할지? 말지?
            override fun isViewFromObject(view: View, obj: Any): Boolean {
                // 7. obj에는 instantiateItem에서 반환 받은 뷰가 들어감
                // view : 화면에 표시할 뷰 = obj 즉, instantiateItem에 지정한 뷰를 그대로 화면에 표시
                return view == obj
            }

            override fun destroyItem(container: ViewGroup, position: Int, obj: Any) {
                pager1.removeView(obj as View)
            }
        }
        pager1.adapter = adapter1
    }
}

답변 3

·

답변을 작성해보세요.

0

지현명님의 프로필

지현명

2020.12.07

<androidx.viewpager.widget.ViewPager
android:id="@+id/pager1"
android:layout_width="match_parent"
android:layout_height="wrap_content" />

저도 에러 났었는데 ViewPager부분을 이렇게 변경하니 잘 됐습니다.
제 소스 첨부합니다.
https://github.com/pulmuone/ViewPager



0

ljws93님의 프로필

ljws93

질문자

2020.12.03

댓글 보고 혹시나 해서 봤는데... 없는데요...?

같은 강의 보신거 맞죠...?

강의 구성 보면

어댑터 구성 만드는법 -> 어댑터 적용 -> 리스너 사용법(여기가 벌써 20분짜리 강의에 19분임) ->  addOnPageChangeListener 사용하여 리스너 적용 -> 끝

후반부 어디에 viewPager2에 대해 언급하고 있다는건지 모르겠네요...

또한 윤재성의 Kotlin 기반 안드로이드 앱 개발 Part1 - UI Programming 여기 모든 강의 봐도 viewPager2에대한 강의는 없는거 같은데요

그리고 제가 묻고 싶은건 잠깐 언급하는게 아니라 viewPager2에 대한 사용법도 있는지입니다.

0

후반부에 보시면 ViewPager2를 언급하고 있습니다..