У меня есть список с прикрепленным к нему адаптером. Я передаю объекты сообщений в адаптер. Обычно я просто вызываю notifydatasetchanged() после каждого добавления, однако я хочу оптимизировать его, поскольку иногда я могу получить 10 сообщений, поступающих в адаптер за 2 секунды.Как только вызвать notifydatasetchanged() после x количество объектов в x число секунд?
Я пробовал следующий код, но через некоторое время приложение будет разбиваться.
Если добавления происходят очень быстро, я бы хотел только вызвать notifydatasetchanged() каждые 4 дополнения. Однако, если скорость добавления медленнее, может быть 1 добавление за 2 секунды, а затем делать notifydatasetchanged() после каждого добавления в порядке.
Любые идеи о том, как я мог бы это сделать? Спасибо
public void addMessage(Message message) {
messages.add(message);
count++;
shouldwenotify();
}
private void shouldwenotify(){
if (count == 1){
handler.postDelayed(runnable, 1500);
}
if (count > 2){
notifyDataSetChanged();
count=0;
}
}
private Runnable runnable = new Runnable() {
@Override
public void run() {
if (count == 1) {
notifyDataSetChanged();
count=0;
} else if (count == 2){handler.postDelayed(runnablesecond, 1000);}
}
};
private Runnable runnablesecond = new Runnable() {
@Override
public void run() {
if (count < 3) {
notifyDataSetChanged();
count = 0;
}
}
};
Рассматривали ли вы с помощью 'RecyclerView' вместо' ListView'? Затем вы можете использовать 'notifyItemInserted()' и 'notifyItemRangeInserted()' методы вместо того, чтобы вызывать 'notifyDataSetChanged()' после каждого добавления. – PPartisan
Я действительно изучал это, я думаю, что решил не идти с ним, потому что вы не можете использовать режим транскрипции с recyclerview. Была и другая причина, но я не могу вспомнить, что это было сейчас. Возможно, я еще раз посмотрю. Спасибо –
Я только что реализовал RecyclerView, и теперь он отлично работает. Спасибо за совет :) –