最终的效果展示:
核心代码:
先准备数据源:
class MainActivity : AppCompatActivity() {
private var specialRequestOptionList: MutableList<SpecialRequestOptionListBean> =
mutableListOf()
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
//准备数据源
specialRequestOptionList.apply {
add(SpecialRequestOptionListBean("T", "", "fruit", "水果", "西瓜", false))
add(SpecialRequestOptionListBean("T", "", "fruit", "水果", "菠萝蜜", false))
add(SpecialRequestOptionListBean("T", "", "fruit", "水果", "草莓", false))
add(SpecialRequestOptionListBean("T", "", "fruit", "水果", "车厘子", false))
add(SpecialRequestOptionListBean("T", "", "nut", "坚果", "小核桃", false))
add(SpecialRequestOptionListBean("T", "", "nut", "坚果", "杏仁", false))
add(SpecialRequestOptionListBean("T", "", "nut", "坚果", "花生米", false))
}
btn.setOnClickListener {
startActivityForResult<RequireActivity>(100, "specialList" to specialRequestOptionList)
}
}
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data)
if (resultCode == Activity.RESULT_OK) {
when (requestCode) {
100 -> {
//住宿要求
val selectRequest =
data?.getSerializableExtra("requireList") as MutableList<SpecialRequestOptionListBean>
val selectList = selectRequest.filter { it.isSelected }
val requires = selectList.map { it.text }
if (requires.size == 1) {
tv_result.text = requires[0]
} else {
tv_result.text = requires.joinToString(",")
}
specialRequestOptionList = selectRequest
}
}
}
}
}
看下布局文件:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".MainActivity"
android:layout_marginStart="8dp"
android:layout_marginEnd="8dp"
android:background="#fff">
<Button
android:id="@+id/btn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:text="选择你爱吃的零食"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="选择的结果:"
android:layout_marginTop="10dp"
android:textSize="15sp"/>
<TextView
android:id="@+id/tv_result"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="#292929"
android:textSize="15sp"
/>
</LinearLayout>
单选选择页面:
class RequireActivity : AppCompatActivity() {
private lateinit var requireAdapter: RequireAdapter
private var specialRequestOptionList: MutableList<SpecialRequestOptionListBean>? = null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_require)
initView()
initData()
}
private fun initView() {
specialRequestOptionList =
intent?.getSerializableExtra("specialList") as? MutableList<SpecialRequestOptionListBean>
tv_ensure.setOnClickListener {
val intent = Intent()
intent.putExtra("requireList", requireAdapter.getSelection() as Serializable)
setResult(Activity.RESULT_OK, intent)
finish()
}
}
private fun initData() {
val map = hashMapOf<String, MutableList<SpecialRequestOptionListBean>>()
specialRequestOptionList?.forEach {
if (map.containsKey(it.requestTypeName)) {
map[it.requestTypeName]!!.add(it)
} else {
map[it.requestTypeName] = mutableListOf()
map[it.requestTypeName]!!.add(it)
}
}
map.forEach { m ->
val item = map[m.key]!![0]
map[m.key]!!.add(
0,
SpecialRequestOptionListBean(
"T",
"",
item.requestType,
item.requestTypeName,
"无要求",
!map[m.key]!!.any { it.isSelected })
)
}
requireAdapter = RequireAdapter(map)
recyclerview.apply {
adapter = requireAdapter
layoutManager = LinearLayoutManager(this@RequireActivity)
}
requireAdapter.setNewData(map.keys.toList())
}
}
看下布局文件:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".RequireActivity"
android:background="#fff">
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/recyclerview"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
/>
<TextView
android:id="@+id/tv_ensure"
android:layout_width="match_parent"
android:layout_height="50dp"
android:layout_marginStart="16dp"
android:layout_marginEnd="16dp"
android:background="@drawable/shape_corner_blue"
android:gravity="center"
android:text="确定"
android:textColor="#fff"
android:layout_marginBottom="40dp"
android:textSize="18sp" />
</LinearLayout>
看下RequireAdapter:
class RequireAdapter(private var specialRequestOptionMap: HashMap<String, MutableList<SpecialRequestOptionListBean>>) :
BaseQuickAdapter<String, BaseViewHolder>(R.layout.item_require) {
override fun convert(helper: BaseViewHolder, type: String) {
helper.apply {
val rvRequire = helper.getView<RecyclerView>(R.id.rv_require)
val requireAdapter = ChildRequireAdapter()
setText(R.id.tv_require_type, type)
rvRequire.apply {
adapter = requireAdapter
layoutManager = LinearLayoutManager(mContext)
}
requireAdapter.setNewData(specialRequestOptionMap[type])
requireAdapter.setOnItemClickListener { adapter, view, position ->
specialRequestOptionMap[type]?.forEach { it.isSelected = false }
specialRequestOptionMap[type]?.get(position)!!.isSelected = true
requireAdapter.setNewData(specialRequestOptionMap[type])
}
}
}
private inner class ChildRequireAdapter :
BaseQuickAdapter<SpecialRequestOptionListBean, BaseViewHolder>(R.layout.item_require_child) {
override fun convert(helper: BaseViewHolder, item: SpecialRequestOptionListBean) {
helper.apply {
val checkRequire = getView<CheckBox>(R.id.check_require)
checkRequire.isChecked = item.isSelected
setText(R.id.tv_require, item.text)
setVisible(R.id.view_divider, helper.adapterPosition != data.size - 1)
}
}
}
fun getSelection(): List<SpecialRequestOptionListBean> {
val resultList = mutableListOf<SpecialRequestOptionListBean>()
specialRequestOptionMap.forEach {
it.value.forEach { bean ->
if (bean.text != "无要求") {
resultList.add(bean)
}
}
}
return resultList
}
}
源码地址:https://download.csdn.net/download/jingerlovexiaojie/18434649