如何解决如何创建没有上下文属性的自定义arrayAdapter
对于一个学校项目,我使用上下文,资源和项属性制作了一个自定义的arrayadapter。今天,我收到了老师的反馈,他希望我找到一个没有Context属性的解决方案,因为他不喜欢我总是需要指定上下文。
这是我的代码:
class TalentListAdapter(
var mCtx: Context,var resources: Int,var items: MutableList<Talent>
) : ArrayAdapter<Talent>(mCtx,resources,items) {
lateinit var mItem: Talent
override fun getView(position: Int,convertView: View?,parent: ViewGroup): View {
val layoutInflater: LayoutInflater = LayoutInflater.from(mCtx)
val view: View = layoutInflater.inflate(resources,null)
mItem = items[position]
//set name of talent
val talentTextView: TextView = view.findViewById(R.id.talentName)
talentTextView.text = mItem.toString()
return view
}
}
他想摆脱mCtx:Context属性,但是我没有找到解决方案。有什么建议吗?
适配器是这样创建的atm:
override fun onViewCreated(view: View,savedInstanceState: Bundle?) {
super.onViewCreated(view,savedInstanceState)
val listView: ListView = binding.talentList
// set custom adapter for talent_list
val adapter = TalentListAdapter(view.context,R.layout.talentlayout,binding.talentViewModel?.getTalents()?.value as MutableList<Talent>)
listView.adapter = adapter
}
解决方法
你能试试吗
class YourAdapter() : RecyclerView.Adapter<YourAdapter.ViewHolder>() {
inner class ViewHolder(val view: View) : RecyclerView.ViewHolder(view)
var Data: List<YourResponse> = emptyList()
set(value) {
field = value
notifyDataSetChanged()
}
override fun onCreateViewHolder(parent: ViewGroup,viewType: Int): ViewHolder {
val view = LayoutInflater.from(parent.context).inflate(
R.layout.your_layout,parent,false
)
return ViewHolder(view)
}
override fun getItemCount(): Int {
return Data.size
}
override fun onBindViewHolder(holder: ViewHolder,position: Int) {
val getYourModel = Data[position]
val Binding = holder.view
Binding.yourTextView.apply{
text = getYourModel.yourField
}
.....
}
}
并从您的Data
或Fragment
中传递Activity
(我的示例使用Retrofit2
)
private var theList: List<YourResponse> = emptyList()
private val theAdapter =yourAdapter()
override fun onViewCreated(view: View,savedInstanceState: Bundle?) {
super.onViewCreated(view,savedInstanceState)
onUpdateData()
}
private fun onUpdateData() {
...
override fun onResponse(call: Call<YourResponse>,response: Response<YourResponse>) {
val body = response.body()?.results
if (response.isSuccessful && body != null) {
onUpdateDataSuccess(body)
} else {
// Something
}
}
...
}
private fun onUpdateDataSuccess(data: List<YourResponse>) {
theList = data
theAdapter.Data = data
}
...
,
膨胀时只需要 context ,因此应使用 parent.context 而不是显式上下文。 Parent.Context表示实现此回收者视图的活动/片段。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。