WINDOWS правильный ответ
#include <iostream>
#include <cmath>
#include <ctime>
using namespace std;
int main (void)
{
srand (time (0));
int Temp = 0;
int max = 1;
int maxi = 0;
int n = 0;
cout << "Input n = ";
cin >> n;
cout << endl;
int *A = new int[n];
for (int i = 0; i < n; i++)
{
A[i] = -10 + rand () % 30;
cout << A[i] << " ";
}
for (int i = 0; i < n; i++)
{
if (abs (A[i]) > abs (max))
{
max = A[i];
maxi = i;
}
}
cout << "\nABS(Max) = " << max << " Number = " << maxi;
Temp = A[n - 1];
A[n - 1] = max;
A[maxi] = Temp;
cout << endl;
for (int i = 0; i < n; i++)
{
cout << A[i] << " ";
}
delete[]A;
}
Объяснение:
ответ:Для начала в onCreate() уберите эту строку:
chatContainer.clear()
Нет смысла чистить только созданный пустой список. Дальше я бы вам советовал следующим образом. Для начала при объявлении адаптера не нужно сразу ему передавать список:
lateinit var adapter: RecyclerChatAdapter
Дальше как только ваш список заполнен вы это проверяете в цикле и инициализируете адаптер:
when {
documentSnapshot != null -> {
for (dc in documentSnapshot.documentChanges) {
when (dc.type) {
DocumentChange.Type.ADDED -> {
val chat = dc.document.toObject(Chat::class.java)
chatContainer.add(chat) // Добавление данных в Recycler
if(chatContainer.size == documentSnapshot.documentChanges)
{
adapter = RecyclerChatAdapter(chatContainer)
}
}
}
}
}
}
и дальше сеттинг адаптера как и было у вас в вашем примере. Так же второй вариант как решить вашу проблему, но не уверен что получится, можно в цикле там где вы выводите сообщение в лог обновлять адаптер:
for (i in chatContainer) {
adapter.notifyDataSetChanged()
}
ответ: windows, tux
Объясние: