Почему элемент в RecyclerView не отображается?
Добавление элемента происходит по следующей схеме: Activity в котором находится Adapter -> Activity2, в котором создается объект Adapter'a и добавляется элемент, при этом предыдущее Activity на паузе. При таких манипуляциях элемент и вправду попадает в список items в Adapter'е, но отображения не имеет. После пересоздания Activity так же нет отображения.

Код Adapter'a:
class TimerAdapter : RecyclerView.Adapter<RecyclerView.ViewHolder>() {
private var items: ArrayList<Timer> = ArrayList()
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder {
return TimerViewHolder(
LayoutInflater.from(parent.context).inflate(R.layout.list_item_timer, parent, false)
)
}
override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) {
when (holder) {
is TimerViewHolder -> {
holder.bind(items[position])
}
}
}
override fun getItemCount(): Int {
return items.size
}
class TimerViewHolder
constructor(itemView: View) : RecyclerView.ViewHolder(itemView) {
private val timerType: TextView = itemView.timer_type
private val day: TextView = itemView.day
private val time: TextView = itemView.time
private val cardView: CardView = itemView.card_view
private val colors: ArrayList<Int> = arrayListOf(
R.color.timer_blue,
R.color.timer_green,
R.color.timer_orange,
R.color.timer_purple,
R.color.timer_red
)
fun bind(timer: Timer) {
timerType.text = timer.quoteType
day.text = timer.day
time.text = timer.time
cardView.setBackgroundColor(colors[(0..colors.size).random()])
}
}
fun submitTimerInfo(quoteType: String, day: String, time: String) {
val element = Timer(quoteType, day, time)
if (!items.contains(element)) {
items.add(element)
notifyItemInserted(items.indexOf(element))
}
}
}
Вызов метода из условного Activity2:
private var timerAdapter = TimerAdapter()
timerAdapter.submitTimerInfo(timerType(), day, timePicker())
Ответы (1 шт):
Автор решения: Dewerro
→ Ссылка
Как правильно порекомендовал ЮрийСПб в комментариях, ответ был найден в получении результата из Activity с помощью ActivityResultContracts.StartActivityForResult().
private val resultContract =
registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result: ActivityResult ->
if (result.resultCode == Activity.RESULT_OK && result.data != null) {
// действие
}
}
Подробнее про ResultContract в этой документации от Google.