У меня есть Лента сообщений (что-то похожее на ленту новостей Facebook), и в его макете у меня есть EditText , доля Button вверху и RecyclerView под ним.RecyclerView показывает сообщения всех пользователей, получая все сообщения с сервера и связывая данные через адаптер в методе OnCreate
.
Когда пользователь публикует что-либо, набрав текст в EditText и нажав кнопку «Поделиться», данныеотправляется на сервер (я использую Retrofit), и после успешного ответа с сервера я вызываю ту же функцию, которая вызывает в OnCreate
метод для отображения всех сообщений для обновления RecyclerView.
Проблема, с которой я сталкиваюсь, заключается в том, чтоданные отправляются на сервер, но раскладка обновляется только тогда, когда я нажимаю кнопку «Назад», чтобы скрыть / закрыть клавиатуру после ввода, или показать / открыть клавиатуру, коснувшись EditText.
Ниже приведены некоторые изКод для лучшего понимания:
Здесь я отправляю запрос на сервер, когда пользователь что-то публикует:
Call<CreatePost> call = mAPIService.sharePost(apiKey, post_description);
call.enqueue(new Callback<CreatePost>() {
@Override
public void onResponse(@NonNull Call<CreatePost> call, @NonNull Response<CreatePost> response) {
boolean error = response.body().getError();
if (!error) {
displayFeedPosts();
}
}
@Override
public void onFailure(@NonNull Call<CreatePost> call, @NonNull Throwable t) {
Log.d(TAG, "Error: " + t.getMessage());
}
});
Вот метод displayFeedPosts:
private void displayFeedPosts() {
Call<FeedPosts> call = mAPIService.displayFeedPosts(apiKey);
call.enqueue(new Callback<FeedPosts>() {
@Override
public void onResponse(@NonNull Call<FeedPosts> call, @NonNull Response<FeedPosts> response) {
boolean error = response.body().getError();
if (!error) {
ArrayList<Post> feedPosts = response.body().getPosts();
for (Post post : feedPosts) {
mTripFeedPostUserNames.add(post.getFirstName() + " " + post.getLastName());
mTripFeedPostTime.add(post.getPostDatetime());
mTripFeedPostContent.add(post.getPostDescription());
}
}
}
@Override
public void onFailure(@NonNull Call<FeedPosts> call, @NonNull Throwable t) {
Log.d(TAG, "Error: " + t.getMessage());
}
});
initRecyclerView();
}
private void initRecyclerView() {
LinearLayoutManager layoutManager = new LinearLayoutManager(this, LinearLayoutManager.VERTICAL, true);
RecyclerView recyclerView = findViewById(R.id.trip_feed_recycler_view);
recyclerView.setNestedScrollingEnabled(false);
recyclerView.setLayoutManager(layoutManager);
mTripFeedPostRecyclerViewAdapter = new TripFeedPostRecyclerViewAdapter(this, mTripFeedPostProfileImages, mTripFeedPostUserNames, mTripFeedPostTime, mTripFeedPostContent, mTripFeedPostImages, mTripFeedPostID);
recyclerView.setAdapter(mTripFeedPostRecyclerViewAdapter);
}
PS: Я новичок в Android, прошу прощения, если я поступил неправильно.Ваши предложения приветствуются.
Примечание: тот же вопрос был задан в отношении ListView здесь и здесь , но это не решило мою проблему