ViewPager + Fragment + RadioButton的使用

ViewPager + Fragment + RadioButton常见于首页。或者详情页的tab切换。出现频率非常之高。顾记录之。哪天忘了。就拿来看看。好记性不如烂笔头。

Adapter 创建

class MineAdapter(
    fm: FragmentManager,
) : FragmentStatePagerAdapter(fm, BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT) {
    
    override fun getCount(): Int {
        return 3 //此处返回的数量为页数总和(从1开始)
    }

    override fun getItem(position: Int): Fragment {
        return when (position) {
            TYPE_1 -> 1Fragment.newInstance()
            TYPE_2 -> 2Fragment.newInstance()
            TYPE_3 -> 3Fragment.newInstance()
            else -> throw IllegalArgumentException("无效参数 $position")
        }
    }

    override fun getItemPosition(any: Any): Int {
        return when (any) {
            is 1Fragment -> TYPE_1
            is 1Fragment -> TYPE_2
            is 1Fragment -> TYPE_3
            else -> super.getItemPosition(any)

        }
    }

    companion object {
        const val TYPE_1 = 0
        const val TYPE_2 = 1
        const val TYPE_3 = 2
    }
}

在activity中的使用

 binding.viewPager.adapter = adapter
 binding.viewPager.offscreenPageLimit = adapter.count

//如果需要viewPager和radioGroup联动。则需添加如下
val bottomTabs = arrayOf(R.id.tab1, R.id.tab2, R.id.tab3 )
binding.radioGroup.setOnCheckedChangeListener { _, i ->
            when (i) {
                bottomTabs[0] -> {
                    binding.viewPager.currentItem = TYPE_1
                }
                bottomTabs[1] -> {
                    binding.viewPager.currentItem = TYPE_2
                }
                bottomTabs[2] -> {
                    binding.viewPager.currentItem = TYPE_3
                }
            }
        }

// 给viewPager设置变化选中页时更新button的监听器
        binding.viewPager.addOnPageChangeListener(
            ViewPagerRadioGroupIndicatorListener(
                binding.rgTab
            )
        )

ViewPagerRadioGroupIndicatorListener如下:

/**
 * 用于当viewPager页面切换时更新radioButtons选中状态的监听器
 *FO
 * @author lxx
 */
class ViewPagerRadioGroupIndicatorListener(
    private val viewGroup: RadioGroup
) : ViewPager.OnPageChangeListener {

    override fun onPageScrollStateChanged(state: Int) {
        // noop
    }

    override fun onPageScrolled(position: Int, positionOffset: Float, positionOffsetPixels: Int) {
        // noop
    }

    override fun onPageSelected(position: Int) {
        viewGroup.forEachIndexed { index, button ->
            if (button is RadioButton) {
                val bt = button as RadioButton
                bt.isChecked = index == position
            }
        }
    }
}

至此。全部结束。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值