Я предполагаю, что вы используете специальный адаптер с каким-то RecyclerView или около того.
Просто создайте статическую логическую переменную, которая поможет сохранить истину при достижении дна в вашем адаптере, как показано ниже, я полагаю, что в этом случае recyclerView.
public class ChatAdapter extends RecyclerView.Adapter<ChatAdapter.ViewHolder> {
public static boolean bottomReached = false;
@Override //Make sure it happens on bindViewHolder or related...
public void onBindViewHolder(final ViewHolder holder, int position) {
if (position == data.size() - 1)
bottomReached = true;
else
bottomReached = false;
}
}
Итак, в вашей деятельности, например, chatActivity, нам нравится ниже.
public class ChatActivity extends AppCompatActivity{
ChatAdapter chatAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_chat);
chatAdapter = new ChatAdapter(this, messagesDataSample);
}
private void gotNewMessage(){
if(chatAdapter.bottomReached)
recyclerView.scrollToPosition(adapter.getItemCount() - 1);
else
// else is not necessary as you don't want to do anything.
}
}
Надеюсь, это поможет, иначе, пожалуйста, дайте мне знать, что идет не так.