Android行业和职业联动选择列表
行业和职业往往需要联动的,一般行业在左,职业在右。
一、思路
用两个RecycleView
二、效果图:
三、关键代码:
class MainActivity : AppCompatActivity() {
private lateinit var data : ProfessionBean
private val data1 = mutableListOf<SubProfession>() // 行业数据
var position1 = 0 // 选中职业所在的行业位置
var currentPosition1 = 0 // 当前浏览的行业位置
private val data2 = mutableListOf<MutableList<SubProfession>>() // 职业数据
var position2 = 0 // 职业选中位置
lateinit var industryAdapter:ProfessionAdapter // 行业
lateinit var professionAdapter:ProfessionAdapter // 职业
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val rvProfession = findViewById<RecyclerView>(R.id.rv_profession)
val rvIndustry = findViewById<RecyclerView>(R.id.rv_industry)
data = UtilHelper.JsonToObject(UtilHelper.getJson(this,"job.json"),ProfessionBean::class.java)
data.professionList?.let { bean ->
if(bean.isNotEmpty()){
for((index1,profession) in bean.withIndex()){
val nameData = mutableListOf<SubProfession>()
profession.subProfessionList?.let { professionNameBean ->
for((index2,professionName) in professionNameBean.withIndex()){
nameData.add(SubProfession(professionName.name?:"",false))
}
}
data1.add(SubProfession(profession.name?:"",index1 == 0))
data2.add(nameData)
}
}else{
finish()
}
}?: finish()
rvProfession.layoutManager = FlowLayoutManager()
professionAdapter = ProfessionAdapter(R.layout.item_profession,1){
if(data2.size > position1 && data2[position1].size > position2){
data2[position1][position2].isSelect = false
}
position1 = currentPosition1
position2 = it
data2[position1][position2].isSelect = true
//selectList[0] = data1[position1].name?:""
//selectList[1] = data2[position1][position2].name?:""
// 职业列表刷单个会闪屏,所以全刷了
professionAdapter.notifyDataSetChanged()
}
rvProfession.adapter = professionAdapter
if(data2.size > position1){
professionAdapter.setNewInstance(data2[position1])
}
rvIndustry.layoutManager = LinearLayoutManager(this,
RecyclerView.VERTICAL,false)
industryAdapter = ProfessionAdapter(R.layout.item_industry,0){
currentPosition1 = it
if(data2.size > currentPosition1){
professionAdapter.setNewInstance(data2[currentPosition1])
}
}
rvIndustry.adapter = industryAdapter
industryAdapter.setNewInstance(data1)
}
}
四、项目demo源码结构图:
有问题或者需要完整源码demo的可以看简介联系我,也可以私信我,我每天都看私信的