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,上滑到顶部也是一样的道理。
网友评论