LinearLayoutManager setReverseLayout()== true但是项目从底部堆叠

时间:2014-12-31 23:54:30

标签: android layout-manager reverse android-recyclerview

这似乎是一个简单的解决方案,但似乎设置

private RecyclerView mRecyclerView;
private RecyclerView.Adapter mAdapter;
private LinearLayoutManager mLayoutManager;

.... // More code

    mRecyclerView = (RecyclerView) rootView.findViewById(R.id.recycler_view);

    // Add item decoration
    mRecyclerView.addItemDecoration(new SpacesItemDecoration(DIVIDER_SPACE));

    // use this setting to improve performance if you know that changes
    // in content do not change the layout size of the RecyclerView
    mRecyclerView.setHasFixedSize(true);

    // use a linear layout manager
    mLayoutManager = new LinearLayoutManager(getActivity());
    mLayoutManager.setReverseLayout(true); // THIS ALSO SETS setStackFromBottom to true
    mRecyclerView.setLayoutManager(mLayoutManager);

似乎还要从底部设置要堆叠的项目

我尝试将setStackFromBottom设置为false,但是没有做任何事情,反转项目顺序的最佳方法是什么,但仍然从顶部填充?我应该使用Custom Comparator类吗?我希望这比创建另一个类更简单。

5 个答案:

答案 0 :(得分:107)

来自setReverseLayout

的文档
  

用于反转项目遍历和布局顺序。这与RTL视图的布局更改类似。设置为true时,第一项布置在UI的末尾,第二项布置在它之前等。对于水平布局,它取决于布局方向。当设置为true时,如果RecyclerView是LTR,那么它将从RTL布局,如果RecyclerView}是RTL,它将从LTR布局。如果您要查找setStackFromBottom(boolean)的完全相同的行为,请使用setStackFromEnd(boolean)

因此,请尝试在LinearLayoutManager实例上使用setStackFromEnd(boolean)

LinearLayoutManager mLayoutManager = new LinearLayoutManager(getActivity());
mLayoutManager.setReverseLayout(true);
mLayoutManager.setStackFromEnd(true);

答案 1 :(得分:29)

接受的答案很有效,我遇到了困难,因为我遇到了android.os.Bundle错误。

然后在寻找解决方案后,我发现那里有一个愚蠢的错误。我使用的是can not resolve method setReverseLayout而不是RecyclerView.LayoutManager

所以我想要消除这里的混乱,我需要把它作为答案。

请勿使用LinearLayoutManager代替RecyclerView.LayoutManager

LinearLayoutManager

...

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

答案 2 :(得分:0)

我找到了使用xml解决此问题的有效方法:

app:layoutManager="android.support.v7.widget.LinearLayoutManager"
app:stackFromEnd="true"

答案 3 :(得分:0)

我正在使用水平方向为水平的RecyclerView,并且由于某些未知原因,当我尝试使用setReverseLayout(true)反转布局时,可接受的答案对我不起作用。

但是通过XML可以正常工作。

                <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"/>

答案 4 :(得分:0)

我遇到了这个错误,我的工作输入了错误

recyclerView = vista.findViewById(R.id.recyclerView);
    LinearLayoutManager mLayoutManager = new LinearLayoutManager(getActivity());
    mLayoutManager.setReverseLayout(false);
    mLayoutManager.setStackFromEnd(false);
    recyclerView.setLayoutManager(mLayoutManager);

要在我的应用中搜索,请搜索名称

Query busqueda = databaseReference.child("Productos").orderByChild("pTitle").startAt(txtSearch.getText().toString());
            busqueda.addListenerForSingleValueEvent(new ValueEventListener() {
                @Override
                public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                    postModelList.clear();
                    for(DataSnapshot ds: dataSnapshot.getChildren()){
                        PostModel postModel = ds.getValue(PostModel.class);
                        postModelList.add(postModel);
                        postAdapter = new PostAdapter(getContext(), postModelList);
                        recyclerView.setAdapter(postAdapter);
                    }
                }

                @Override
                public void onCancelled(DatabaseError databaseError) {
                    Toast.makeText(getContext(), databaseError.getMessage(), Toast.LENGTH_SHORT).show();
                }
            });