Я получаю данные из локальной базы данных внутри моего приложения. база данных имеет 43 строки, поэтому это не длинный список. Вот часть в моем коде, где я выбираю свои данные:
fun readAllPoets(): ArrayList<Poet> {
val poetList: ArrayList<Poet> = arrayListOf<Poet>()
val db = readableDatabase
val stringQuery = "SELECT * FROM info"
val cursor: Cursor = db.rawQuery(stringQuery,null)
var poetid: String
var faname: String
var enname: String
while (cursor.moveToNext()) {
poetid = cursor.getString(cursor.getColumnIndex(DBPoet.UserEntry.COLUMN_POET_ID))
faname = cursor.getString(cursor.getColumnIndex(DBPoet.UserEntry.COLUMN_FANAME))
enname = cursor.getString(cursor.getColumnIndex(DBPoet.UserEntry.COLUMN_ENNAME))
poetList.add(Poet(poetid, faname, enname))
}
cursor.close()
return poetList
}
, а затем в MainActivity я вызываю эту функцию:
private fun fetchPoets() {
poetList = DBHelper.UsersDBHelper(this).readAllPoets()
rvPoetList.layoutManager = LinearLayoutManager(this)
poetList.forEach {
it.imageId = this.baseContext.resIdByName(it.enName.toLowerCase(),"drawable")
}
val adapter = PoetListAdapter()
adapter.setData(poetList)
rvPoetList.adapter = adapter
}
, как вы можете видеть, я добавляю идентификатор ресурса изображения для моего объекта Poet. нет загрузки из inte rnet. все локально. вот мой код адаптера:
class ViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
fun bind(poet: Poet) {
itemView.poet_title.setText(poet.faName)
itemView.img_poet.setImageResource(poet.imageId)
}
}
fun setData(poets: List<Poet>) {
this.poets = poets
notifyDataSetChanged()
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
val view = LayoutInflater.from(parent.context)
.inflate(R.layout.single_poet_view, parent, false)
return ViewHolder(view)
}
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
poets?.get(position)?.let { poet ->
holder.bind(poet)
}
holder.itemView.setOnClickListener { v ->
listener?.onItemClickListener(v, holder.layoutPosition)
}
}
, как вы можете видеть, я не постоянно звоню R.id, который, как я знаю, является дорогостоящим вызовом, и это делает задержку просмотра переработчиком. Даже если все локально, изображения, которые я получаю локально, довольно маленькие (около 150 Кбайт каждый), и я не называю R.id постоянно, он все еще сильно отстает при прокрутке. Так в чем здесь проблема?