问题描述
(我对 Kotlin 和编程很陌生,所以如果我想不出明显的解决方案,我深表歉意。)
我正在尝试创建一个 ExpandableListView,其中子项也可以展开和折叠。我已经设法设置了一个 onChildClickListener 来扩充必要的布局,但是当再次单击孩子时,我无法找到销毁或删除所述布局的方法。
代码如下:
override fun onViewCreated(view: View,savedInstanceState: Bundle?) {
super.onViewCreated(view,savedInstanceState)
val dataset: List<Medication> = MedicationsListData().loadMedicationsList()
val medicationsListView: ExpandableListView = view.findViewById(R.id.medications_list_view)
medicationsListView.setAdapter(Medicationslistadapter(requireContext(),dataset))
medicationsListView.setonChildClickListener { _,v,groupPosition,childPosition,_ ->
//get data for correct item
val tempKey = (dataset.distinctBy { it.groupName })[groupPosition].groupName
val clickedItem = dataset.filter { it.groupName == tempKey }[childPosition]
//inflate or destroy medication_item_content
var contentView: View? = null
if (contentView == null) {
val layoutInflater =
this.requireContext()
.getSystemService(Context.LAYOUT_INFLATER_SERVICE) as LayoutInflater
layoutInflater.inflate(
R.layout.medication_item_content,v.findViewById(R.id.content_view_holder),true
)
} else contentView!!.visibility = View.GONE
//populate view with data
false
}
如果我将 contentView 变量移到 onChildClickListener 方法之外,则会出现错误:
Added variable(s) does not support value initialization: Adding field object com.example.quickref.uicontrollers.MedicationsFragment.contentView
添加一个简单的布尔变量也不起作用,因为有多个子级,每个子级都使用相同的方法。
我想另一种方法是将子项也设置为 ExpandableListViews,但这似乎需要大量看似不必要的代码,因为可展开/可折叠内容的结构是相同的,现在我可以从一个数据类填充字符串。
谢谢!
解决方法
你有没有试过这个: https://developer.android.com/reference/android/widget/ExpandableListView ? 它是更复杂的列表版本,可以制作可扩展的项目。