Я создаю чат-приложение. Я пытаюсь отменить прокрутку данных чата и хочу перезагрузить данные снизу. Как перезагрузить recyclerview, когда я нажимаю кнопку отправки. Иногда он показывает данные второй страницы. Я также пробовал использовать разбиение на страницы. но это не работает. Я видел несколько примеров, также они использовали firebase.
@Override
protected void onCreate(Bundle savedInstanceState) {
supportRequestWindowFeature(Window.FEATURE_NO_TITLE);
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_chat);
loginmodel = new Gson().fromJson(SharedPref.Getloggeduserdetials(SharedPref.LOGGOEDUSERDATABASE, ""), Loginmodel.class);
send = findViewById(R.id.send);
message = findViewById(R.id.message);
rv_chat = findViewById(R.id.rv_chat);
//rv_chat.setHasFixedSize(true);
department = findViewById(R.id.department);
name = findViewById(R.id.name);
back_button = findViewById(R.id.back_button);
((Myapp) getApplication()).getAppComponent().doInjection(Chatactivity.this);
chatviewmodel = ViewModelProviders.of(this, viewModelFactorys).get(Chatviewmodel.class);
chatviewmodel.apiResponse().observe(this, this::consumeResponsess);
is_item_cleared = true;
linearLayoutManager = new LinearLayoutManager(this);
linearLayoutManager.setStackFromEnd(true);
linearLayoutManager.setOrientation(LinearLayoutManager.VERTICAL);
rv_chat.setLayoutManager(linearLayoutManager);
chatadapter = new ChatAdapter(this, Chatactivity.this);
rv_chat.setAdapter(chatadapter);
name.setText(loginmodel.getName());
department.setText(loginmodel.getDepartment());
chatviewmodel.receive_msg(String.valueOf(page), SharedPref.getToken(SharedPref.TOKEN, ""), Chatactivity.this);
send.setOnClickListener(view ->
{
chatviewmodel.send_msg(message.getText().toString(), SharedPref.getToken(SharedPref.TOKEN, ""), Chatactivity.this);
message.setText("");
});
back_button.setOnClickListener(view->{
onBackPressed();
});
rv_chat.addOnScrollListener(new PaginationScrollListener(linearLayoutManager) {
@Override
protected void loadMoreItems() {
isLoading = true;
Log.d("Page_No.10", String.valueOf(page));
if (!isLastPage) {
Log.d("Page_No.7", String.valueOf(page));
new Handler().postDelayed(() -> {
is_item_cleared = false;
Log.d("Page_No.8", String.valueOf(page));
chatviewmodel.receive_msg(String.valueOf(page), SharedPref.getToken(SharedPref.TOKEN, ""), Chatactivity.this);
}, 200);
}
}
@Override
public boolean isLastPage() {
return isLastPage;
}
@Override
public boolean isLoading() {
return isLoading;
}
});
}
private boolean listIsAtTop() {
if (rv_chat.getChildCount() == 0) return true;
return rv_chat.getChildAt(0).getTop() == 0;
}
@Override
public void onBackPressed() {
super.onBackPressed();
Intent intent = new Intent(this, Profile_Activity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
finish();
}
@Override
public void handleresponse(ApiResponse apiResponse) {
Log.w("Api Response", new GsonBuilder().setPrettyPrinting().create().toJson(apiResponse.data.getData()));
//swipeTorefresh.setRefreshing(false);
isLoading = false;
isLastPage = false;
if (apiResponse.data.getSuccess().equalsIgnoreCase("1")) {
if (apiResponse.data.getData() instanceof Pagination) {
if (apiResponse.data.getData() != null) {
Pagination<ChatModel> pagination = (Pagination<ChatModel>) apiResponse.data.getData();
if (pagination.getData() != null) {
if (chatadapter != null) {
if (is_item_cleared) {
chatadapter.clearitem();
}
chatadapter.addItems(pagination.getData());
if (pagination.getData()!= null) {
isLastPage = true;
}
else {
page += 1;
}
}
} else {
page = 1;
chatviewmodel.receive_msg(String.valueOf(page), SharedPref.getToken(SharedPref.TOKEN, ""), Chatactivity.this);
}
} else if (apiResponse.data.getData() instanceof Baseresponse) {
Utility.Logout(this);
}
}
}
}