помогите добавить список из recyclerview Kotlin
всем привет мне нужно добавить список во фрагмент с названием городов , для этого я создал recyclerView , создал для него адаптер но у меня инчего не выходит можете помочь пожалуйста по Kotlin.
вот мой код из recycleview adapter
class RecyclerAdapter : RecyclerView.Adapter<RecyclerAdapter.Vholder>() {
private var list = arrayListOf<String>()
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): Vholder {
val view = LayoutInflater.from(parent.context).inflate(R.layout.item_linear, parent, false)
return Vholder(view)
}
fun addlist(item : String){
list.add(item)
notifyDataSetChanged()
}
override fun getItemCount() = list.size
fun update(list: List<String>){
this.list.clear()
this.list.addAll(list)
notifyDataSetChanged()
}
override fun onBindViewHolder(holder: Vholder, position: Int) {
holder.bind(list[position])
}
class Vholder(view: View) : RecyclerView.ViewHolder(view) {
fun bind(data: String) {
itemView.TVone.text = data
}
}
}
а теперь мне в нижнем фрагменте нужно выявить список с названием городов
class AlarmFragment : BaseFragment() {
override fun resID()= R.layout.alarm
private var list = arrayListOf<String>()
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
listArr()
}
private fun listArr() {
val adapter = RecyclerAdapter()
reclerview.adapter = adapter
list.add("New Yourk")
list.add("Vancuover")
list.add("Berlin")
list.add("Hamburg")
list.add("Oslo")
list.add("Cabo0werde")
}
Ответы (1 шт):
Вы создали в вашем адаптере метод addlist() который должен добавлять элементы по одному. И создали вы его правильно (хотя тут спорный вопрос, почему бы не добавлять сразу весь список, а не по одному. Но это уже детали задач и реализации). И нигде в вашем коде вы его не вызываете.
Второй момент, вы не добавили LayoutManager для вашего recyclerView, а значит ваш RecyclerView не знает как ему рисовать ваши элементы.
Накидаю небольшой пример адаптера:
class ImageAdapter :
RecyclerView.Adapter<ImageAdapter.ViewHolder>() {
var items: List<Photo> = emptyList()
set(value) {
field = value
notifyDataSetChanged()
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
val view = LayoutInflater.from(parent.context).inflate(R.layout.list_item_image, parent, false)
return ViewHolder(view)
}
override fun getItemCount(): Int = items.size
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
holder.bind(items[position])
}
class ViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
internal fun bind(photo: Photo) {
with(itemView) {
// здесь вы уже биндите ваши View как вам нужно
textView.text = "HelloWorld"
}
}
}
}
В Activity:
private fun initRecycler() {
imageRecycler.adapter = imageAdapter
imageRecycler.layoutManager = LinearLayoutManager(this)
imageAdapter.items = photos
}