2016-06-16 1 views
0

私はlistViewからRecyclerViewにチャットレイアウトを変換しました。メッセンジャーアプリケーションのRecyclerView

新しいメッセージが到着して自動的に表示されない場合、手動でそのメッセージにスクロールする必要があります。

それ以前のListViewでは動作しています。

私はrecylerViewでsetStackFormEndを使用しました。

は私がのWhatsAppのような機能は、新しいメッセージが到着すると、あなたが最後のメッセージを表示することができれば

のように、それはあなたがメッセージをスクロールした場合、メッセージが、

が、それは変更されないことが表示されます持っていたいですポジション。

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

コードコード

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()); 
    } 
}); 

答えて

0

スクロール最後の位置

messagesは、メッセージのリストです
messagesView.scrollToPosition(messages.size()-1); 

にrecyclerviewを作成上のサンプル。

+0

手動でスクロールする必要はありません。実際にはいくつかの規定setReverseLayoutがありますが、それでも私のために働いていません。 – Jarvis

+0

'layoutManager.setReverseLayout(true);'?これも機能していませんか? – jitinsharma

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

コードにコンテキストを追加してください – Arbitur

+0

@Arbiturはこちらを確認してくださいhttps://stackoverflow.com/a/36897608/6352712 – Sergey

0

メッセージイベントの送受信後にこれらの行を使用してください。

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