我有RecyclerView
,其高度设置为wrap_content
。现在我需要实现OnLoadMore
但是存在问题。
我用了,
RecyclerView.OnScrollListener.onScrolled(RecyclerView recyclerView, int dx, int dy)
但它没有被调用,因为我的RecyclerView
没有滚动。它的高度为wrap_content
。
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/root_rtl"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/white">
<include
android:id="@+id/tool_bar"
layout="@layout/toolbar" />
<ScrollView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_below="@id/tool_bar">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
tools:context="com.yarima.msn.Activities.ProfileActivity">
<FrameLayout
android:id="@+id/FRAGMENT_PLACEHOLDER"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/white">
<!-- Some Content That I want to scroll with recyclerview -->
</FrameLayout>
<android.support.v7.widget.RecyclerView
android:id="@+id/recyclerview_posts"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:scrollbars="vertical"
android:bellow="@id/FRAGMENT_PLACEHOLDER"/>
</RelativeLayout>
</ScrollView>
</RelativeLayout>
所以我需要使用另一种方法将更多页面加载到RecyclerView
。
我认为最好的方法是在onLoadMore
的最后一项变得可见时调用RecyclerView
事件。我已经尝试从适配器中的onBindViewHolder
方法执行此操作,但所有页面都已加载。
if(getItemCount()-position == 1 && onLoadMoreListener != null){
if (recyclerView != null) {
visibleItemCount = recyclerView.getChildCount();
totalItemCount = recyclerView.getLayoutManager().getItemCount();
firstVisibleItem = ((LinearLayoutManager)recyclerView.getLayoutManager()).findFirstVisibleItemPosition();
if (loading) {
if (totalItemCount > previousTotal) {
loading = false;
previousTotal = totalItemCount;
}
}
if (!loading && (totalItemCount - visibleItemCount)
<= (firstVisibleItem + visibleThreshold)) {
loading = true;
onLoadMoreListener.onLoadMore();
}
}
}
在不使用滚动事件的情况下实现onLoadMore
的替代方法是什么?
更新
RecyclerView
与android:layout_height:"wrap_content"
完美配合,我的ScrollView
顺畅滚动。
更新2:
我的问题是当RecyclerView
身高为wrap_content
时,无法调用RecyclerView
的滚动事件。所以我需要一种替代方法来找出我的RecyclerView
何时到达其列表的末尾并以此方式实现OnLoadMore
事件。
更新3
我在编写问题之前简化了xml ...在实际的xml中,有ViewPager
而不是RecyclerView
。我在ViewPager
中有4个标签,每个标签都包含一个内容不同的RecyclerView
。
高于此ViewPager
我有一些关于用户的信息,我想将所有这些信息一起滚动。因此,我将此标题和ViewPager
放在ScrollView
中,并将RecyclerView
的高度设置为wrap_content
。
您可以查看Instagram的个人资料页面。我想这个页面就是这样的。
无法在RecyclerView
的标头中显示此信息,因为这样,我应该在每个标签的每个RecyclerView
中添加此信息。
答案 0 :(得分:0)
<强>被修改强>
可以在scrollview中查找滚动事件
https://developer.android.com/reference/android/view/View.html#onScrollChanged(int,int,int,int)
答案 1 :(得分:0)
您需要将ViewPager
和RecyclerView
保留在NestedScrollView
内。最终的xml应该是这样的。
<android.support.v4.widget.NestedScrollView
android:layout_width="match_parent"
android:layout_height="wrap_content">
<ViewPager/>
<RecyclerView/>
</android.support.v4.widget.NestedScrollView>
并将RecyclerView
的高度设置为match_parent
。
你将在这里遇到另一个问题。当加载RecyclerView
时,页面将自动滚动到底部。但也有一个解决方案。
将android:descendantFocusability="blocksDescendants"
添加到NestedScrollView
中的子布局,这将阻止自动滚动到底部。
如果以上操作无效,请在nestedScrollView.scrollTo(0, 0);
加载项目后尝试从代码设置RecyclerView
。