RecyclerView 从后端加载 10000+ 张图像 api
RecyclerView load 10000+ image from backend api
我在后端 API 中得到 JSON 数据。
[
{
id: "is random"
image: "my url"
},
......10000+
]
我的id是随机数,没有连续性
每个 json 对象都有图像。
我调用 api 并将数据放入 RecyclerView
.
但是显示RecyclerView
的时候会卡死或者崩溃
我使用Glide加载图片。
GlideApp.with(context).load(myUrl).placeholder(myPlaceholder).into(uiImage)
怎样才能让RecyclerView
顺利阅读?
能否使用Paging Library让它在开头显示五个数据?
但是我不知道哪种DataSource
适合我的json格式
ItemKeyedDataSource
?或 PageKeyedDataSource
?或 PositionalDataSource
?
更新:
class MyAdapter(): ListAdapter<Item, ItemHolder>(Item.DIFF_CALLBACK){
override fun onCreateViewHolder(parent: ViewGroup, type: Int): ItemHolder=
ItemHolder(LayoutInflater.from(parent.context), parent).also {}
override fun onBindViewHolder(holder: ItemHolder, position: Int): Unit =
with(holder) {
val item = getItem(position)
uiTextView.text = item.id
GlideApp.with(context).load(item.image).placeholder(myPlaceholder).into(uiImage)
}
}
更新:
class ItemHolder(inflater: LayoutInflater, parent: ViewGroup)
: RecyclerView.ViewHolder(inflater.inflate(R.layout.my_Item, parent, false)) {
val uiTextView: TextView = itemView.findViewById(R.id.my_textView)
val uiImage: ImageView = itemView.findViewById(R.id.my_image)
}
如果我删除占位符,有时它会崩溃。
GlideApp.with(context).load(myUrl).into(uiImage)
日志消息:
I/Choreographer: Skipped 3660 frames! The application may be doing too much work on its main thread.
inject GlideApp,而不是每次都创建新的实例,这会让你的应用更流畅。
另外,如果您正在使用 Paging Library,则使用 PagedListAdapter.
我在后端 API 中得到 JSON 数据。
[
{
id: "is random"
image: "my url"
},
......10000+
]
我的id是随机数,没有连续性
每个 json 对象都有图像。
我调用 api 并将数据放入 RecyclerView
.
但是显示RecyclerView
的时候会卡死或者崩溃
我使用Glide加载图片。
GlideApp.with(context).load(myUrl).placeholder(myPlaceholder).into(uiImage)
怎样才能让RecyclerView
顺利阅读?
能否使用Paging Library让它在开头显示五个数据?
但是我不知道哪种DataSource
适合我的json格式
ItemKeyedDataSource
?或 PageKeyedDataSource
?或 PositionalDataSource
?
更新:
class MyAdapter(): ListAdapter<Item, ItemHolder>(Item.DIFF_CALLBACK){
override fun onCreateViewHolder(parent: ViewGroup, type: Int): ItemHolder=
ItemHolder(LayoutInflater.from(parent.context), parent).also {}
override fun onBindViewHolder(holder: ItemHolder, position: Int): Unit =
with(holder) {
val item = getItem(position)
uiTextView.text = item.id
GlideApp.with(context).load(item.image).placeholder(myPlaceholder).into(uiImage)
}
}
更新:
class ItemHolder(inflater: LayoutInflater, parent: ViewGroup)
: RecyclerView.ViewHolder(inflater.inflate(R.layout.my_Item, parent, false)) {
val uiTextView: TextView = itemView.findViewById(R.id.my_textView)
val uiImage: ImageView = itemView.findViewById(R.id.my_image)
}
如果我删除占位符,有时它会崩溃。
GlideApp.with(context).load(myUrl).into(uiImage)
日志消息:
I/Choreographer: Skipped 3660 frames! The application may be doing too much work on its main thread.
inject GlideApp,而不是每次都创建新的实例,这会让你的应用更流畅。
另外,如果您正在使用 Paging Library,则使用 PagedListAdapter.