这里有几个相关的帖子,但没有一个是相同的情况/没有解决方案对我有用。
我有一个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"
感谢阅读。如果你们需要更多代码,我可以发布你需要的任何内容
答案 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>