0

レイアウトファイル内にRecyclerViewを持つフラグメントがあります。 RecyclerViewはチャット中にメッセージを保持します。当然ながら、チャットの断片が開いたら、RecyclerViewを下にスクロールする必要があります。自動的にRecyclerViewの一番下までスクロール

私はRecyclerViewに直接スクロールしてみました:

var mRecyclerView = view.FindViewById<RecyclerView> 
mRecyclerView.ScrollToPosition(mMessages.Count-1); 

第二の方法:

LinearLayoutManager mLinearLayoutManager = new LinearLayoutManager(Application.Context); 
mRecyclerView.SetLayoutManager(mLinearLayoutManager); 
mLinearLayoutManager.ScrollToPosition(mMessages.Count - 1);  

第三の方法:

LinearLayoutManager mLinearLayoutManager = new LinearLayoutManager(Application.Context); 
mRecyclerView.SetLayoutManager(mLinearLayoutManager); 
mLinearLayoutManager.ScrollToPositionWithOffset(mMessages.Count - 1, 0); 

残念ながら、何もいずれかの場合には起こりません。どんな提案も大歓迎です!

答えて

0

smoothScrollToPositionを使用して問題を解決してください。 私は常にsmoothScrollToPositionを使用して任意の位置にリダイレクトします。

考えてみると、mMessagesのサイズが良いことを確認してください。

例、

RecyclerView rv = (RecyclerView)findViewById(R.id.recyclerView); 
rv.smoothScrollToPosition(mMessages.count-1); 
+0

_Make確認、mMessagesサイズはあなたthinking._ として良い仕事作ったどのようにあなたは何を意味するのですか? 'SmoothScrollToPosition'は私の問題を解決しませんでした。 – rasperryPi

+0

'mMessages'サイズがアイテムを含む画面よりも大きいことを確認してください –

+0

あなたはビューが実際にスクロール可能であることを意味していますか?その場合は、そうです。 – rasperryPi

2

あなたは、レイアウトの方向は同じままになり、最後の要素を表示するようにビューを設定しますsetStackFromEnd=trueを設定することができます。

編集後、私はを更新しました。ただ、このように:

LinearLayoutManager mLinearLayoutManager = new LinearLayoutManager(Application.Context); 
    mLinearLayoutManager.setStackFromEnd(true); 
    mRecyclerView.SetLayoutManager(mLinearLayoutManager); 
    mRecyclerView.scrollToPosition(mMessages.Count-1); 

the documentationを確認してください。

を編集します。問題は、レイアウトマネージャをrecyclerviewに設定せずにscrollToPositionを呼び出すことです。

RecyclerViewクラスのscrollToPosition関数を考慮すると、あなたの場合は意味があります。

/** 
    * Convenience method to scroll to a certain position. 
    * 
    * RecyclerView does not implement scrolling logic, rather forwards the call to 
    * {@link android.support.v7.widget.RecyclerView.LayoutManager#scrollToPosition(int)} 
    * @param position Scroll to this adapter position 
    * @see android.support.v7.widget.RecyclerView.LayoutManager#scrollToPosition(int) 
    */ 
    public void scrollToPosition(int position) { 
     if (mLayoutFrozen) { 
      return; 
     } 
     stopScroll(); 
     if (mLayout == null) { 
      Log.e(TAG, "Cannot scroll to position a LayoutManager set. " + 
        "Call setLayoutManager with a non-null argument."); 
      return; 
     } 
     mLayout.scrollToPosition(position); 
     awakenScrollBars(); 
    } 

はLayoutManagerのセットを配置するためにスクロールすることはできません。引数がnullでないsetLayoutManagerを呼び出します。

+0

これは私の問題を解決しませんでした – rasperryPi

+0

私は私の答えを更新しました。それがあなたに役立つ場合は – ziLk

+0

を確認してください。私の答えを承認してください。 – ziLk

0

私はあなたが正しい方法でそれを呼んでいないと信じています。 LinearLayoutManagerとリサイクルビューを渡して動作させる必要があります。ここで私はそれが

mLayoutManager.smoothScrollToPosition(mRecyclerView, null, array.size() - 1); 
+0

JavaとXamarinでAndroidがどのように動作しているかの違いと関係しているかもしれませんが、Xamarinではヌルオブジェクト参照例外があります。 – rasperryPi

関連する問題