Android - RecyclerView从中间而不是顶部开始

时间:2017-08-07 07:10:26

标签: java android xml android-recyclerview

这里有几个相关的帖子,但没有一个是相同的情况/没有解决方案对我有用。

我有一个RecyclerView加载来自Firebase的一些数据。我正在使用自定义适配器。问题是当视图加载时,它会加载到RecyclerView的中间。然后,我必须手动向上滚动到顶部。

我的布局非常简单:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
          xmlns:tools="http://schemas.android.com/tools"
          xmlns:app="http://schemas.android.com/apk/res-auto"
          android:layout_width="match_parent"
          android:layout_height="match_parent"
          android:orientation="vertical"
          android:background="@color/grey"
          android:layout_marginBottom="50dp"
          >

<android.support.v7.widget.RecyclerView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/recycler_view_feed"
        android:layout_marginTop="10dp"
>

</android.support.v7.widget.RecyclerView>


</LinearLayout>

从Firebase加载我的自定义对象后,我设置了这样的RecyclerView(这是从onCreateView调用的方法(它是一个片段)):

CompleteWorkoutRecyclerAdapter adapter = new CompleteWorkoutRecyclerAdapter(list, getContext(),
                                getActivity());
mRecyclerView.setAdapter(adapter);
mRecyclerView.setHasFixedSize(false);
linearLayoutManager = new LinearLayoutManager(getActivity(), LinearLayoutManager.VERTICAL, true);
mRecyclerView.setLayoutManager(linearLayoutManager);

我已经尝试过这些问题来解决问题,但没有运气:

linearLayoutManager.scrollToPosition(0);

mRecyclerView.scrollToPosition(0);

android:focusableInTouchMode="true"

感谢阅读。如果你们需要更多代码,我可以发布你需要的任何内容

3 个答案:

答案 0 :(得分:2)

首先将您的xml更改为此

<android.support.v7.widget.RecyclerView
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:id="@+id/recycler_view_feed"
    android:layout_marginTop="10dp">

然后代码

mRecyclerView.setHasFixedSize(false);
linearLayoutManager = new LinearLayoutManager(getActivity());
mRecyclerView.setLayoutManager(linearLayoutManager);
CompleteWorkoutRecyclerAdapter adapter = new CompleteWorkoutRecyclerAdapter(list, getContext(),
                                getActivity());
mRecyclerView.setAdapter(adapter);

将适配器中行布局的高度更改为wrap_content

答案 1 :(得分:0)

使用此代码:

      CompleteWorkoutRecyclerAdapter adapter = new CompleteWorkoutRecyclerAdapter(list, getContext(),
                                    getActivity());

    linearLayoutManager = new LinearLayoutManager(getActivity(), LinearLayoutManager.VERTICAL, false);
    mRecyclerView.setLayoutManager(linearLayoutManager);
mRecyclerView.setAdapter(adapter);

希望这会帮助你..

答案 2 :(得分:0)

使用relative layout代替linear layout

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
          xmlns:tools="http://schemas.android.com/tools"
          xmlns:app="http://schemas.android.com/apk/res-auto"
          android:layout_width="match_parent"
          android:layout_height="match_parent"
          android:background="@color/grey"
          android:layout_marginBottom="50dp"
          >

<android.support.v7.widget.RecyclerView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/recycler_view_feed"
        android:layout_marginTop="10dp"
        android:layout_alignParentTop="true">

</android.support.v7.widget.RecyclerView>


</RelativeLayout>