fix
lmw
2023-03-14 128cbeac95dbc995fe1760bbd0f0a985fa5d23ba
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
package com.fuban.user.dialog
 
import android.app.Activity
import android.content.Intent
import android.os.Bundle
import android.view.Gravity
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.fragment.app.DialogFragment
import androidx.recyclerview.widget.LinearLayoutManager
import cn.sinata.xldutils.activity.BaseActivity
import cn.sinata.xldutils.utils.myToast
import com.fuban.user.R
import com.fuban.user.network.HttpManager
import com.fuban.user.network.entity.Passenger
import com.fuban.user.network.request
import com.fuban.user.ui.mine.AddPassengerActivity
import com.fuban.user.ui.mine.adapter.PassengerAdapter
import kotlinx.android.synthetic.main.dialog_passenger.*
import org.jetbrains.anko.matchParent
import org.jetbrains.anko.support.v4.startActivityForResult
import org.jetbrains.anko.wrapContent
 
class PassengerDialog : DialogFragment() {
    private val list = arrayListOf<Passenger>() //数据源
    private val max by lazy { //最大座位数
        arguments?.getInt("max",6)?:6
    }
    private var ids = ""//已选回显
 
    private val adapter = PassengerAdapter(list,checkable = true)
 
    override fun onCreateView(
        inflater: LayoutInflater,
        container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? {
        return inflater.inflate(R.layout.dialog_passenger, container, false)
    }
 
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setStyle(STYLE_NO_FRAME, R.style.Dialog)
    }
 
    override fun onActivityCreated(savedInstanceState: Bundle?) {
        super.onActivityCreated(savedInstanceState)
        dialog?.window?.setLayout(matchParent, wrapContent)
        dialog?.window?.setGravity(Gravity.BOTTOM)
        dialog?.setCanceledOnTouchOutside(true)
    }
 
    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        super.onViewCreated(view, savedInstanceState)
        ids = arguments?.getString("ids")?:""
        lv_list.layoutManager = LinearLayoutManager(requireContext())
        lv_list.adapter = adapter
        adapter.setOnItemClickListener { view, position ->
            list[position].checked = !list[position].checked
            adapter.notifyItemChanged(position)
            ids = list.filter { it.checked }.joinToString (","){ it.id.toString() }
        }
        tv_add.setOnClickListener {
            startActivityForResult<AddPassengerActivity>(10086)
        }
        tv_action.setOnClickListener {
            val filter = list.filter { it.checked }
            if (filter.isEmpty()){
                myToast("请选择乘车人")
                return@setOnClickListener
            }
            if (filter.size>max){
                myToast("最多选择${max}人")
                return@setOnClickListener
            }
            callback?.onOk(filter.size,filter.joinToString(",") { it.id.toString() })
            dismiss()
        }
        getData()
    }
 
    private fun getData(){
        HttpManager.queryFrequentPassengersList().request(requireActivity() as BaseActivity,success = { _, data->
            list.clear()
            list.addAll(data?: emptyList())
            if (ids.isNotEmpty()){
                val split = ids.split(",")
                list.forEach {
                    it.checked = it.id.toString() in split
                }
            }
            adapter.notifyDataSetChanged()
        })
    }
 
    override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
        super.onActivityResult(requestCode, resultCode, data)
        if (resultCode == Activity.RESULT_OK&&requestCode == 10086){
            getData()
        }
    }
 
    interface Callback {
        fun onOk(num: Int,ids:String)
    }
 
    private var callback: Callback? = null
 
    fun setCallback(callback: Callback) {
        this.callback = callback
    }
}