(我对Kotlin和编程非常陌生,所以如果这有一个明显的解决方案我无法弄清楚,我很抱歉。)
我试图创建一个可扩展的elistview,其中的孩子也可以展开和折叠。我已经设法建立了一个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?这是一个更复杂的版本的列表,有可能使可扩展的项目。