我一直在嘗試使RecyclerView
在我的應用程序中工作,其中列表項是ImageView
s,並且圖像被下載並放入(異步)在onBindViewHolder
方法中。我不是對着我的代碼中的任何錯誤,但由於某些原因RecycleView列表項不顯示
只有列表中的項目,這將是可見的(甚至部分)給用戶 活動時的負荷,也圖像加載到他們。
雖然我看不到圖像,但我觀察到這些項目的高度和寬度已正確分配。並且由於圖像首先被下載,然後ImageView
的尺寸被確定,我認爲問題與RecyclerView
本身有關?如果有人能夠闡明這一點,那將會很棒。謝謝。
我還想補充一點,如果活動暫停然後恢復(通過點擊「方形」導航按鈕然後恢復),所有列表項的圖像加載正確。
這裏是我的代碼:
onCreate
方法:
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
recyclerView {
id = ViewID.ID_LIST
}
val imgList = ArrayList<ImageView>()
imgList.add(ImageView(ctx))
imgList.add(ImageView(ctx))
imgList.add(ImageView(ctx))
imgList.add(ImageView(ctx))
val lv = findViewById(ViewID.ID_LIST) as RecyclerView
lv.layoutManager = LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false)
lv.adapter = ImageRecyclerAdapter(ctx, imgList)
}
的RecyclerView.Adapter
類:
private class ImageRecyclerAdapter(val context: Context, val imageList: ArrayList<ImageView>) :
RecyclerView.Adapter<RecyclerView.ViewHolder>() {
override fun onViewRecycled(holder: RecyclerView.ViewHolder?) {
super.onViewRecycled(holder)
if (holder != null) {
val v = holder.itemView as ImageView
v.setImageBitmap(null)
}
}
override fun onBindViewHolder(p: RecyclerView.ViewHolder, position: Int) {
val v = p.itemView as ImageView
Ion.with(v)
.load("https://pbs.twimg.com/profile_images/616076655547682816/6gMRtQyY.jpg")
.setCallback({ exception, t ->
if (t != null) {
val dm = Point()
context.windowManager.defaultDisplay.getRealSize(dm)
val w = t.maxWidth
val h = t.maxHeight
val params = t.layoutParams
if (params != null) {
params.width = dm.x
params.height = (dm.x * (h.toDouble()/w.toDouble())).toInt()
t.layoutParams = params
t.requestLayout()
}
}
})
}
override fun getItemCount(): Int {
return imageList.size
}
override fun onCreateViewHolder(parent: ViewGroup?, viewType: Int): RecyclerView.ViewHolder {
val v = ImageView(context)
return object : RecyclerView.ViewHolder(v) {}
}
}
你知道嗎?這是對recyclerView,適配器和ViewHolder背後邏輯的徹底誤解。適配器應該將數據綁定到視圖,但是您正試圖將視圖放入視圖。 RTFM https://developer.android.com/reference/android/support/v7/widget/RecyclerView.html –
當用戶看不到圖像時,圖像是如何設置的?其實這就是爲什麼recyclerviews使用..check https://developer.android.com/training/material/lists-cards.html。如果你仍然不需要它,那麼你應該只使用列表視圖 –
@SurajRao即使用戶可見圖像也沒有設置。例如,請參閱截圖。 – Saurabh