美文网首页
ScrollView+GridView实现上拉加载

ScrollView+GridView实现上拉加载

作者: 失足者 | 来源:发表于2020-02-25 15:46 被阅读0次

1、scrollView嵌套GridView时会有滑动冲突,导致GridView只能显示一行。
解决办法:自定义GridView,重写onMeasure方法

public class MyGridView extends GridView{

    public MyGridView(Context context) {
        super(context);
    }

    public MyGridView(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public MyGridView(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }

    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        int expandSpec = MeasureSpec.makeMeasureSpec(
                Integer.MAX_VALUE >> 2, MeasureSpec.AT_MOST);
        super.onMeasure(widthMeasureSpec, expandSpec);
    }
}

布局:在底部直接放入加载更多的TextView控件
先来看看布局:

<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/scroll_view_device"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:scrollbars="none">
    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent">
        <ImageView
            android:layout_width="match_parent"
            android:layout_height="185dp"
            android:src="@drawable/icon_secon_device_bg"
            android:scaleType="centerCrop"/>
        <com.stx.xhb.xbanner.XBanner
            android:id="@+id/xbanner_ad_device"
            android:layout_width="match_parent"
            android:layout_height="185dp"
            app:AutoPlayTime="3000"
            app:isHandLoop="true"
            app:clipChildrenLeftRightMargin="@dimen/dp_30"
            android:scaleType="centerCrop"
            app:pageChangeDuration="2000"/>
        <com.longma.wxb.view.MyGridView
            android:id="@+id/gv_second_device"
            android:layout_below="@id/xbanner_ad_device"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginLeft="@dimen/dp_10"
            android:layout_marginRight="@dimen/dp_10"
            android:horizontalSpacing="@dimen/dp_10"
            android:verticalSpacing="@dimen/dp_10"
            android:scrollbars="none"
            android:numColumns="2" />
        <TextView
            android:id="@+id/tv_add_more"
            android:layout_width="match_parent"
            android:layout_height="@dimen/dp_48"
            android:text="加载中..."
            android:gravity="center"
            android:layout_below="@id/gv_second_device"
            android:textSize="@dimen/sp_12"
            android:textColor="@color/grey"
            android:layout_marginTop="@dimen/dp_10"/>
    </RelativeLayout>
</ScrollView>

ScrollView设置监听:可以自定义ScrollView重写。页可以设置监听setOnScrollChangeListener

scrollView.setOnScrollChangeListener(new View.OnScrollChangeListener() {
            @Override
            public void onScrollChange(View v, int scrollX, int scrollY, int oldScrollX, int oldScrollY) {
                if (v.getScrollY() +v.getHeight() - v.getPaddingTop()-v.getPaddingBottom() == scrollView.getChildAt(0).getHeight()){
                    if (isVisibleLocal(tv_add_more,true)){
                        deviceGVAdapter.setDeviceCount(6);
                        activityUtils.showToast("显示加载更多!");
                    }
                }
            }
        });

在监听是否滑动到底部的时候,同时判断底部的TextView是否进入屏幕显示
感谢:判断ScrollView滑动时View是否可见的方法

public static boolean isVisibleLocal(View target, boolean judgeAll) {
        Rect rect = new Rect();
        target.getLocalVisibleRect(rect);
        if (judgeAll) {
            return rect.top == 0;
        }else {
            return rect.top >= 0;
        }
    }

这样做上拉加载暂时没遇到什么bug,上滑到顶部也是一样的道理。

相关文章

网友评论

      本文标题:ScrollView+GridView实现上拉加载

      本文链接:https://www.haomeiwen.com/subject/upetchtx.html