Не следует создавать новый объект RecyclerView при каждом вызове API.Также вы назначаете адаптер и LayoutManager с вашим RecycletView в каждом вызове.
Вам просто нужно установить Adapter с вашим RecycletView один раз, а затем второй раз просто добавить новые данные в список ваших адаптеров и уведомить свой адаптер об обновлении.
Пожалуйста, проверьте ниже код.
private ItemsAdapter adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main_activity);
recyclerView = findViewById(R.id.chatrecycler);
recyclerView.setLayoutManager(new LinearLayoutManager(SingleChat.this, LinearLayoutManager.VERTICAL,true));
get_items();
Timer timer = new Timer();
timer.scheduleAtFixedRate(new TimerTask() {
synchronized public void run() {
get_items();
}
}, TimeUnit.SECONDS.toMillis(3), TimeUnit.SECONDS.toMillis(3));
}
public void get_items(){
Client client = ServiceGenerator.createService(Client.class,getBaseContext());
final Call<List<Items>> call = Client.getItems("items");
call.enqueue(new Callback<List<Items>>() {
@Override
public void onResponse(Call<List<Items>> call, Response<List<Items>> response) {
List<Items> items = response.body();
if(adapter == null) {
adapter = new ItemsAdapter(items);
recyclerView.setAdapter(adapter);
} else {
runOnUiThread(new Runnable() {
@Override
public void run() {
adapter.addMoreItems(items);
adapter.notifyDatasetChanged();
}
});
}
}
@Override
public void onFailure(Call<List<SingleChatItem>> call, Throwable t) {
}
});
}
Добавьте один метод в вашем ItemsAdapter.java как,
public void addMoreItems(List<Items> items) {
this.items = items;
}