class KotlinFragment : Fragment() {
private lateinit var viewModelFactory: KotlinViewModelFactory
private lateinit var titleList: List<String>
private val viewModel: KotlinViewModel by viewModels { viewModelFactory }
private var expandableListView: ExpandableListView? = null
private var adapter: ExpandableListAdapter? = null
private var dataList: HashMap<String, List<String>> = HashMap()
private var kotlinDataList: List<Kotlin> = mutableListOf()
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
val root = inflater.inflate(R.layout.fragment_kotlin, container, false)
viewModelFactory = Injection.provideViewModelFactory(context!!)
expandableListView = root.findViewById(R.id.exp_list_view)
prepareDataList()
prepareDataForExpListView(kotlinDataList)
initExpListView()
return root
}
private fun prepareDataList() {
viewModel.getData()
.subscribeOn(
Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(object : SingleObserver<List<Kotlin>> {
override fun onSuccess(t: List<Kotlin>) {
kotlinDataList = t
}
override fun onSubscribe(d: Disposable) {}
override fun onError(e: Throwable) {}
})
}
private fun prepareDataForExpListView(kotlinDataList: List<Kotlin>) {
kotlinDataList.forEach {
dataList[it.question] = listOf(it.answer)
}
}
private fun initExpListView() {
if (expandableListView != null) {
val listData = dataList
titleList = ArrayList(listData.keys)
adapter = context?.let {
CustomExpandableListAdapter(
it,
titleList as ArrayList<String>,
listData
)
}
expandableListView!!.setAdapter(adapter)
}
}
}