2017-08-06 20 views
0

アクティビティを読み込んだ後、RecyclerViewリストの一番下にスクロールしたいと思います。私はメッセージを送信または受信するたびに、メッセージを読むために下にスクロールする必要があります。メッセージの送受信時に自動的にスクロールするように設定するにはどうすればよいですか?ここで入力時に自動的にRecyclerViewリストをスクロールする

は、私が持っているコードは、これまでのところです:

recyclerView = (RecyclerView) findViewById(R.id.chatWindow_rec); 
recyclerView.setHasFixedSize(true); 

LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this); 
linearLayoutManager.setStackFromEnd(true); 
recyclerView.setLayoutManager(linearLayoutManager); 

recyclerView.setAdapter(Adapter); 

ノー結果と... StackFromEnd、recyclerview.ScrollToPosition(ListMessage.size())を試してみました。これをどうすれば解決できますか?

+2

にデータを追加した後、アダプタの項目数を返す関数を書くあなたはListMessageリストに追加しますか?追加した後にScrollToPositionを行いますか? –

+0

ListMessageには新しいメッセージがすべて含まれていますが、ScrollToPosition(ListMessage.size))を使用していますが、動作しません。 –

答えて

0

使用あなたのコードでこの行は、それはあなたを助けることを願っています:

layoutManager.setReverseLayout(true); 
0

まず、あなたは必ず新しいメッセージで更新されたアダプタで一覧<>を行う必要があります。

RecylcerView.smoothScrollToPosition(List.size())を使用して、リストの一番下までスクロールします。あなたはgetItemCount(以降第二の選択肢で行くべき

あるいは、RecylcerView.smoothScrollToPosition(MessageListAdapter.getItemCountを())を使用

は)それをoveridde覚えて、アダプタのデフォルトの方法です。

public static RecyclerView.LayoutManager createVerticalLayoutManager(Context context) { 
    LinearLayoutManager layoutManager = new LinearLayoutManager(context 
      , LinearLayoutManager.VERTICAL 
      , false); 
    return layoutManager; 
} 

そして、幅と高さをRecyclerViewでmatch_parentにします。アダプター上の

コールのアップデートだけで指定された最新の項目にアダプタを更新の上に新しいメッセージ

 mMessageAdapter.notifyItemChanged(mMessageAdapter.getItemCount()); 

を追加するコード行。

+0

新しいメッセージでリストが更新され、smoothscrooltoposition lise.sizeが使用されましたが、dosnt work –

+0

あなたのアダプタでgetItemCount 。そのメソッドでは、単にlist.size()を返します。 次に、Adapter.getItemCount()でscrollToPositionを使用します。 メッセージリストに最新のメッセージを追加した後に、メソッドを呼び出すようにしてください。 –

+0

あなたのメッセージリストに何も表示されないのではないでしょうか? RecyclerViewはLayoutManagerで正しく設定されている必要があります。 私はちょうど私の答えを更新しました。 –

0

第一あなたが新しいメッセージを受け取るときに、アダプタの使用

recyclerView.smoothScrollToPosition(adapter.getCount()-1); 
関連する問題