Jarvis
Jarvis

Reputation: 1792

RecyclerView for messenger application

I have converted the chat layout from listView to RecyclerView.

Now m facing some problem, When new messages arrive then it not showing automatically, I have to manually scroll to that messages.

Earlier in ListView it working.

I have used set setStackFormEnd in recylerView.

I want feature like whatsapp has like

if new message arrives and you are able to view last message then it will show that messages but

if you scrolling the messages then it doesn't change the position.

    layoutManager.setStackFromEnd(true);
    messagesView.setLayoutManager(layoutManager);
    messagesView.setItemAnimator(new DefaultItemAnimator());
    messagesView.addOnScrollListener(mOnScrollListener);

Sample on Create Code Code

super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final RecyclerView recyclerView = (RecyclerView)    findViewById(R.id.recyclerview);
final Button addButton = (Button) findViewById(R.id.button_is_reverse);
LinearLayoutManager layoutManager = new LinearLayoutManager(this);
layoutManager.setStackFromEnd(true);
layoutManager.setReverseLayout(true);
recyclerView.setLayoutManager(layoutManager);
recyclerView.addItemDecoration(new DividerDecoration(this));
adapter = new SampleAdapter(items);
recyclerView.setAdapter(adapter);
addButton.setOnClickListener(new View.OnClickListener() {
  @Override
  public void onClick(View v) {
    items.add("Items" +items.size());
    adapter.notifyItemInserted(items.size());
  }
});

Upvotes: 0

Views: 1106

Answers (3)

Tanveer Bulsari
Tanveer Bulsari

Reputation: 213

Use these line after you send/receive message event.

   mRecyclerView.postDelayed(new Runnable() {
                        @Override
                        public void run() {
                            mRecyclerView.smoothScrollToPosition(mRecyclerView.getAdapter().getItemCount());
                        }
                    }, 100);

Upvotes: 0

Leo DroidCoder
Leo DroidCoder

Reputation: 15046

LinearLayoutManager layoutManager = new LinearLayoutManager(getActivity());
layoutManager.setStackFromEnd(true);
layoutManager.setReverseLayout(true)
yourRecyclerView.setLayoutManager(layoutManager);

Upvotes: 1

jitinsharma
jitinsharma

Reputation: 1466

Scroll the recyclerview to last position

messagesView.scrollToPosition(messages.size()-1);

Where messages is your list of messages.

Upvotes: 0

Related Questions