【发布时间】:2021-07-05 09:31:51
【问题描述】:
我正在开发一个项目,该项目为每个屏幕实现 2 个视图、一个普通用户视图和一个管理员视图。与普通用户相比,管理员视图具有更多权限,例如从数据库中删除某些帖子或用户本身。
因此,如果 admin 权限为真(我在初始化适配器时将其作为参数值传递),我将这些功能按钮的可见性设置为 GONE )。但我正在努力解决的问题是,我在哪里设置可见性,在onCreateViewHolder 方法或onBindViewHolder 方法中?我现在已经在 onCreateViewHolder 方法中设置了它,因为我已经阅读了一些 Stackoverflow 答案,只是我们应该避免在 onBindViewHolder 方法中进行繁重的操作。但我想知道一个明确的答案。
以下是代码示例供参考:
适配器类声明:
class NoticesAdapter(options: FirestoreRecyclerOptions<NoticeModel>,
private val isAdmin: Boolean,
private val listener: INoticeListAdapter):
FirestoreRecyclerAdapter<NoticeModel, NoticesAdapter.NoticeViewHolder>(options)
onCreateViewHolder 方法:
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): NoticeViewHolder {
val noticeListView = LayoutInflater.from(parent.context).inflate(R.layout.item_notice, parent, false)
val noticeListViewHolder = NoticeViewHolder(noticeListView)
if (!isAdmin)
{
noticeListViewHolder.deleteNoticeBtn.visibility = GONE
}
// On clicking the delete button on a notice by the admin
noticeListViewHolder.deleteNoticeBtn.setOnClickListener {
val noticeSnapshot = snapshots.getSnapshot(noticeListViewHolder.adapterPosition)
listener.deleteNoticeBtnListener(noticeSnapshot)
}
return noticeListViewHolder
}
onBindViewHolder 方法:
override fun onBindViewHolder(holder: NoticeViewHolder, position: Int, model: NoticeModel) {
holder.noticeText.text = model.noticeText
holder.noticeAuthor.text = MyUtils.getUserName()
holder.noticePostDate.text = model.datePosted
holder.noticePostTime.text = model.timePosted
}
【问题讨论】:
-
对于同一个持有者实例,将调用多少次
onCreateViewHolder和onBindViewHolder? ...越低越好...所以“确定的答案”是: .... -
@Selvin onCreateViewHolder,对吧? onCreateViewHolder 在第一次创建回收器视图时调用一次,而 onBindViewHolder 在每次数据更改时调用。只是想确认一下。再次感谢
-
是的,你也可以使用不同的布局(没有这个按钮)并且不要在点击监听器上设置
标签: android kotlin google-cloud-firestore android-recyclerview firebaseui