Beg*_*ner 3 android scrollview android-recyclerview
我在一个Scrollview中有2个水平和1个垂直(网格布局).
<ScrollView>
<Horizontal RecyclerView/>
<Horizontal RecyclerView/>
<Vertical RecyclerView/>
</ScrollView>
Run Code Online (Sandbox Code Playgroud)
以上是我的观点的示意图.
我必须在垂直recyclerviews最后一项可见时加载数据,但我无法获得垂直视图的滚动事件.
这是我的scrollviewlistener.
recyclerView.setOnScrollListener(new RecyclerView.OnScrollListener() {
@Override
public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
super.onScrolled(recyclerView, dx, dy);
totalItemCount = gridLayoutManager.getItemCount();
lastVisibleItem = gridLayoutManager.findLastVisibleItemPosition();
if (!loading && totalItemCount <= (lastVisibleItem + visibleThreshold)) {
// End has been reached
// Do something
if(onLoadMoreListener!=null) {
onLoadMoreListener.onLoadMore(lastVisibleItem);
}
loading = true;
}
}
});
Run Code Online (Sandbox Code Playgroud)
但是这个setonscrollListener永远不会被触发.如何获得上述案例的滚动事件.
提前致谢:)
我遇到的问题是如何解决它:
首先为滚动侦听器创建一个接口
public interface EndlessScrollListener {
void onScrollChanged(EndlessScrollView scrollView,int x, int y, int oldx, int oldy);
}
Run Code Online (Sandbox Code Playgroud)通过扩展ScrollView创建自定义ScrollView
public class EndlessScrollView extends ScrollView
{
private EndlessScrollListener endlessScrollListener = null;
public EndlessScrollView(Context context) {
super(context);
}
public EndlessScrollView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
public EndlessScrollView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public void setScrollViewListener(EndlessScrollListener endlessScrollListener) {
this.endlessScrollListener = endlessScrollListener;
}
@Override
protected void onScrollChanged(int l, int t, int oldl, int oldt) {
super.onScrollChanged(l, t, oldl, oldt);
if (endlessScrollListener != null) {
endlessScrollListener.onScrollChanged(this, l, t, oldl, oldt);
}
}
}
Run Code Online (Sandbox Code Playgroud)然后在Fragment/Activity布局中使用EndlessScrollView而不是Default one:
<YOUR_PACKAGE_NAME.EndlessScrollView
android:id="@+id/my_scroll_view">
<!-- your recycler views ... -->
</YOUR_PACKAGE_NAME.EndlessScrollView>
Run Code Online (Sandbox Code Playgroud)接下来,您的Activity/Fragment应该实现您在步骤1中创建的接口.
将您的Activity/Fragment设置为Scroll Listener,然后像这样使用:
public class YourActivity extends Activity implements EndlessScrollListener
{
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
EndlessScrollView myScrollView = (EndlessScrollView) findViewById(R.id.my_scroll_view);
myScrollView.setScrollViewListener(this);
}
@Override
public void onScrollChanged(EndlessScrollView scrollView, int x, int y, int oldx, int oldy)
{
// We take the last son in the scrollview
View view = scrollView.getChildAt(scrollView.getChildCount() - 1);
int distanceToEnd = (view.getBottom() - (scrollView.getHeight() + scrollView.getScrollY()));
// if diff is zero, then the bottom has been reached
if (distanceToEnd == 0) {
// do stuff your load more stuff
}
}
}
Run Code Online (Sandbox Code Playgroud)| 归档时间: |
|
| 查看次数: |
4801 次 |
| 最近记录: |