Я пытался сделать 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. Если вам все равно не нужно, вам нужно просто использовать listview –
@SurajRao Изображения не устанавливаются, даже если они видны пользователю. Например, см. Скриншот. – Saurabh