先上效果
先声明一下用到的变量
private lateinit var moreSafeFaceDialog: MoreSafeFaceDialog private lateinit var otherFaceNameDialog: MoreFaceNameDialog private lateinit var listViewAdapter: SafeFaceAdapter<ItemSafeFaceBinding, UserFaceBean> private var userFaceData = ObservableArrayList<UserFaceBean>() private val userBox = ObjectBox.store.boxFor(UserFace::class.java)
UserFace是我们创建的工具类,存放声明我们用到的变量
@Entity data class UserFace( @Id var id: Long = 0, var name: String, var age: Int = 0, var sex: Int = 0, var face: String? = null, var type: Int = 0, var stat: Int = 0 )
UserFaceBean是一个bean类
binding.faceList.adapter = listViewAdapter
binding.faceList.setOnItemClickListener { adapterView, view, i, l ->
if (i == 0) {
showFaceDataDialog()
} else {
}
}
因为 我把添加按钮放在第一位所以设置点击item效果
private fun showFaceDataDialog() { if (!this::moreSafeFaceDialog.isInitialized) { moreSafeFaceDialog = MoreSafeFaceDialog(requireContext(), object : DialogListener<String> { override fun onDialogConfirm(position: Int, value: String) { if (position == 8) { showDialog() var relate = SPUtils.getInstance().getString(SPKey.OTHER_NAME) userFaceData.add( UserFaceBean( 0, relate.toString(), "", R.mipmap.face, 0 ) ) listViewAdapter.notifyDataSetChanged() } else { userBox.put(UserFace(0, value, 0, 0, "", R.mipmap.face, 0)) loadUserFaceData() } } }) } moreSafeFaceDialog.show() }
因为最后一个是其他,这边设置的效果是弹出弹框自定义
binding.faceList.setOnItemLongClickListener { adapterView, view, i, l -> if (i > 0) { ConfirmDialog(requireContext(), "提示", "是否删除该数据?", object : DialogListener<String> { override fun onDialogConfirm(position: Int, value: String) { userBox.remove(userFaceData[i].id) loadUserFaceData() } }).show() } return@setOnItemLongClickListener true }
loadUserFaceData() }
这里是设置item的长按效果,弹出弹窗提示
private fun loadUserFaceData() { userFaceData.clear() userFaceData.add(UserFaceBean(0, "添加", "", R.mipmap.add_face, 0)) for (u in userBox.all) { userFaceData.add(UserFaceBean(u.id, u.name, u.face, u.type, u.stat)) } listViewAdapter.notifyDataSetChanged() }
最后加载数据,首先添加第一个数据,作为添加按钮
SPUtils是用来存储数据的Util类,可以直接调用里面的方法