LinearLayoutManager setReverseLayout() == true but items stack from bottom

前端 未结 4 534
自闭症患者
自闭症患者 2020-11-27 17:26

This seems like it would be an easy solution, but it seems that setting

private RecyclerView mRecyclerView;
private RecyclerView.Adapter mAdapter;
private Li         


        
相关标签:
4条回答
  • 2020-11-27 17:51

    I'm using a RecyclerView with horizontal orientation and for some unknown reason(s) the accepted answer didn't work for me when i tried to reverse the layout with setReverseLayout(true).

    but doing it via XML worked fine.

                    <androidx.recyclerview.widget.RecyclerView
                        android:layout_width="match_parent"
                        android:layout_height="wrap_content"
                        android:id="@+id/recycler_view" 
                        android:orientation="horizontal"
                        app:reverseLayout="true"
                        app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"/>
    
    0 讨论(0)
  • 2020-11-27 17:52

    from the docs for setReverseLayout

    Used to reverse item traversal and layout order. This behaves similar to the layout change for RTL views. When set to true, first item is laid out at the end of the UI, second item is laid out before it etc. For horizontal layouts, it depends on the layout direction. When set to true, If RecyclerView is LTR, than it will layout from RTL, if RecyclerView} is RTL, it will layout from LTR. If you are looking for the exact same behavior of setStackFromBottom(boolean), use setStackFromEnd(boolean)

    So, try also using setStackFromEnd(boolean) on your LinearLayoutManager instance,

    LinearLayoutManager mLayoutManager = new LinearLayoutManager(getActivity());
    mLayoutManager.setReverseLayout(true);
    mLayoutManager.setStackFromEnd(true);
    
    0 讨论(0)
  • 2020-11-27 18:14

    The accepted answer works well and I went through a hardship to make it work as I was getting can not resolve method setReverseLayout error.

    Then after searching for solutions I found there was a silly mistake out there. I was using RecyclerView.LayoutManager instead of LinearLayoutManager.

    So I thought to remove the confusions around here I need to put it as an answer.

    Do not use RecyclerView.LayoutManager instead of LinearLayoutManager

    // Declare your RecyclerView and the LinearLayoutManager like this 
    private RecyclerView mRecyclerView;
    private LinearLayoutManager mLayoutManager;
    

    ...

    // Now set the properties of the LinearLayoutManager 
    mLayoutManager = new LinearLayoutManager(MainActivity.this);
    mLayoutManager.setReverseLayout(true);
    mLayoutManager.setStackFromEnd(true);
    
    // And now set it to the RecyclerView
    mRecyclerView.setLayoutManager(mLayoutManager);
    mRecyclerView.setAdapter(yourAdapter);
    
    0 讨论(0)
  • 2020-11-27 18:15

    I found the effective method to solve this using xml:

    app:layoutManager="android.support.v7.widget.LinearLayoutManager"
    app:stackFromEnd="true"
    
    0 讨论(0)
提交回复
热议问题