实现二级列表联动

效果如上,代码adapter使用的是BaseRecyclerViewAdapterHelper代码如下

class SpecialtyClassifyActivity : BaseMvpActivity<SpecialtyClassifyPresenter>(), SpecialtyClassifyContract.View {

    override fun getLayoutViewId(): Int {
        return R.layout.activity_special_classify
    }

    private val mAdaper: SpecialClassifyAdapter by lazy {
        SpecialClassifyAdapter()
    }

    private val mNameAdaper: SpecialNameAdapter by lazy {
        SpecialNameAdapter()
    }

    private val mSaveNamekey = linkedMapOf<Int, Int>()
    private val mSaveContentKey=linkedMapOf<Int, Int>()

    private var mOldPos = 0

    override fun initView(mRootView: View, savedInstanceState: Bundle?) {

        mRecyclerSpecialName.run {
            adapter = mNameAdaper
        }

        mRecyclerSpecialContent.run {
            adapter = mAdaper
            addOnScrollListener(object : RecyclerView.OnScrollListener() {
                override fun onScrolled(recyclerView: RecyclerView, dx: Int, dy: Int) {
                    super.onScrolled(recyclerView, dx, dy)
                    val manager = recyclerView.layoutManager as LinearLayoutManager
                    val position = manager.findFirstCompletelyVisibleItemPosition()
                    val item = mAdaper.getItem(position)
                    if (mSaveNamekey.containsKey(item!!.type)) {
                        val namePos = mSaveNamekey.get(item.type)!!
                        if (namePos != mOldPos) {
                            mNameAdaper.setNewData(resetValue(mNameAdaper.data, namePos))
                            val nameManager=mRecyclerSpecialName.layoutManager as LinearLayoutManager
                            nameManager.scrollToPositionWithOffset(namePos,0)
                        }
                    }
                }
            })
        }

        mNameAdaper.run {
            setOnItemClickListener { _, _, position ->
                val item = mNameAdaper.getItem(position)
                if (mSaveContentKey.containsKey(item!!.type)){
                    val contentPos=mSaveContentKey.get(item.type)
                    val manager=mRecyclerSpecialContent.layoutManager as LinearLayoutManager
                    manager.scrollToPositionWithOffset(contentPos!!,0)
                }
            }
        }

        mNameAdaper.setNewData(getTitleName())
        mAdaper.setNewData(getContent())
    }

    override fun initData() {

    }

    private fun resetValue(data: MutableList<SpecialNameEntity>, pos: Int): MutableList<SpecialNameEntity> {
        data.get(pos).select = true
        data.get(mOldPos).select = false
        mOldPos = pos
        return data
    }

    private fun getContent(): MutableList<SpecialClassifyEntity> {
        val data = mutableListOf<SpecialClassifyEntity>()
        data.add(SpecialClassifyEntity("计算机专业", 1))
        data.add(SpecialClassifyEntity("计算机专业", 1))
        data.add(SpecialClassifyEntity("计算机专业", 1))
        data.add(SpecialClassifyEntity("计算机专业", 1))
        data.add(SpecialClassifyEntity("会计专业", 2))
        data.add(SpecialClassifyEntity("会计专业", 2))
        data.add(SpecialClassifyEntity("金融专业", 3))
        data.add(SpecialClassifyEntity("金融专业", 3))
        data.add(SpecialClassifyEntity("护理专业", 4))
        data.add(SpecialClassifyEntity("护理专业", 4))
        data.add(SpecialClassifyEntity("竞技专业", 5))
        data.add(SpecialClassifyEntity("竞技专业", 5))
        data.add(SpecialClassifyEntity("美术专业", 6))
        data.add(SpecialClassifyEntity("美术专业", 6))
        data.add(SpecialClassifyEntity("美发专业", 7))
        var oldType=0
        for (i in data.indices) {
            val entity = data[i]
            if (oldType!=entity.type){
                mSaveContentKey.put(entity.type, i)
                oldType=entity.type
            }
        }
        Log.e("tag",mSaveContentKey.toString())
        return data
    }

    private fun getTitleName(): MutableList<SpecialNameEntity> {
        val data = mutableListOf<SpecialNameEntity>()
        data.add(SpecialNameEntity("计算机专业", 1, true))
        data.add(SpecialNameEntity("会计专业", 2, false))
        data.add(SpecialNameEntity("金融专业", 3, false))
        data.add(SpecialNameEntity("护理专业", 4, false))
        data.add(SpecialNameEntity("竞技专业", 5, false))
        data.add(SpecialNameEntity("美术专业", 6, false))
        data.add(SpecialNameEntity("美发专业", 7, false))
        data.add(SpecialNameEntity("篮球专业", 8, false))
        data.add(SpecialNameEntity("足球专业", 9, false))
        data.add(SpecialNameEntity("羽毛球专业", 10, false))
        data.add(SpecialNameEntity("高尔夫球专业", 11, false))
        data.add(SpecialNameEntity("乒乓球专业", 12, false))
        data.add(SpecialNameEntity("橄榄球专业", 13, false))
        data.add(SpecialNameEntity("棒球专业", 14, false))
        data.add(SpecialNameEntity("蹴鞠专业", 15, false))
        for (i in data.indices) {
            val entity = data[i]
            mSaveNamekey.put(entity.type, i)
        }
        return data
    }
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
实现二级联动下拉列表,可以通过以下步骤进行: 1. 在HTML中,创建两个下拉列表,一个作为主要的下拉列表,另一个作为次要的下拉列表,例如: ``` <select id="mainList"> <option value="">请选择</option> <option value="1">选项1</option> <option value="2">选项2</option> <option value="3">选项3</option> </select> <select id="subList" disabled> <option value="">请选择</option> </select> ``` 2. 使用JavaScript编写代码,以根据主下拉列表的选择更新次下拉列表。例如: ``` var mainList = document.getElementById("mainList"); var subList = document.getElementById("subList"); mainList.addEventListener("change", function() { var selectedValue = mainList.value; // 清空次下拉列表 subList.innerHTML = '<option value="">请选择</option>'; if (selectedValue === "1") { // 如果选择了选项1,则更新次下拉列表的选项 subList.innerHTML += '<option value="11">选项1-1</option>'; subList.innerHTML += '<option value="12">选项1-2</option>'; } else if (selectedValue === "2") { // 如果选择了选项2,则更新次下拉列表的选项 subList.innerHTML += '<option value="21">选项2-1</option>'; subList.innerHTML += '<option value="22">选项2-2</option>'; } else if (selectedValue === "3") { // 如果选择了选项3,则更新次下拉列表的选项 subList.innerHTML += '<option value="31">选项3-1</option>'; subList.innerHTML += '<option value="32">选项3-2</option>'; } // 启用或禁用次下拉列表 if (selectedValue) { subList.disabled = false; } else { subList.disabled = true; } }); ``` 3. 上述代码将监听主下拉列表的“change”事件,并在选择更改时更新次下拉列表的选项。此外,代码还会启用或禁用次下拉列表,以防止用户在未选择主列表时进行选择。 希望这能帮助到你实现二级联动下拉列表
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值