【问题标题】:java.lang.ClassCastException androidx.viewpager.widget.Viewpager cannot be cast to CustomPagerjava.lang.ClassCastException androidx.viewpager.widget.Viewpager 无法转换为 CustomPager
【发布时间】:2020-09-13 14:19:53
【问题描述】:

我想使用一个动态调整高度的viewpager,所以我创建了一个custompager并尝试构建它,但是我得到了以下错误。 由 at.ViewPagerAdapter.setPrimaryItem(ViewPagerAdapter.kt:34) 引起的错误 at.CustomPager.onMeasure(CustomPager.kt:22) 有人可以帮忙吗?

下面是我发生错误的代码。

class CustomPager : ViewPager {
    private var mCurrentView: View? = null

    constructor(context: Context?) : super(context!!) {}
    constructor(context: Context?, attrs: AttributeSet?) : super(
        context!!,
        attrs
    ) {
    }

    public override fun onMeasure(widthMeasureSpec: Int, heightMeasureSpec: Int) {
        var heightMeasureSpec = heightMeasureSpec
        if (mCurrentView == null) {
            super.onMeasure(widthMeasureSpec, heightMeasureSpec)
            return
        }
        var height = 0
        mCurrentView!!.measure(
            widthMeasureSpec,
            MeasureSpec.makeMeasureSpec(
                0,
                MeasureSpec.UNSPECIFIED
            )
        )
        val h = mCurrentView!!.measuredHeight
        if (h > height) height = h
        heightMeasureSpec = MeasureSpec.makeMeasureSpec(
            height,
            MeasureSpec.EXACTLY
        )
        super.onMeasure(widthMeasureSpec, heightMeasureSpec)
    }

    fun measureCurrentView(currentView: View?) {
        mCurrentView = currentView
        requestLayout()
    }

    fun measureFragment(view: View?): Int {
        if (view == null) return 0
        view.measure(0, 0)
        return view.measuredHeight
    }
}

class ViewPagerAdapter(fragmentManager: FragmentManager) : FragmentPagerAdapter(fragmentManager) {

    private val mFragmentList: ArrayList<Fragment> = ArrayList()
    private val mFragmentTitleList: ArrayList<String> = ArrayList()
    private var mCurrentPosition = -1

    override fun getPageTitle(position: Int): CharSequence? {
        return mFragmentTitleList[position]
    }

    override fun getItem(position: Int): Fragment {
        return mFragmentList[position]
    }

    override fun getCount(): Int {
       return mFragmentList.size
    }

    override fun setPrimaryItem(container: ViewGroup, position: Int, `object`: Any) {
        super.setPrimaryItem(container, position, `object`)

        if (position != mCurrentPosition) {
            val fragment = `object` as Fragment?
            val pager = container as CustomPager
            if (fragment != null && fragment.view != null) {
                mCurrentPosition = position
                pager.measureCurrentView(fragment.view)
            }
        }

    }

    fun addFragment(fragment: Fragment, title: String) {
        mFragmentList.add(fragment)
        mFragmentTitleList.add(title)
    }
}

【问题讨论】:

    标签: android kotlin


    【解决方案1】:

    这个类型转换是错误的:container as CustomPager;因为它是ViewPager

    您很可能没有在 XML 中夸大任何 CustomPager

    【讨论】:

    • 我已经将 custompager 添加到 xml 而不是 viewpager。
    猜你喜欢
    • 2017-07-07
    • 2016-12-05
    • 1970-01-01
    • 2014-07-08
    • 2012-08-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-26
    相关资源
    最近更新 更多