Scrollviewfresh加載數(shù)據(jù) 嵌套NonScrollListView甸祭,NonScrollListView item中包含NonScrollGridView
這個(gè)布局中最外層用的是HeaderViewPager忿晕,大概的效果就是京東店鋪詳情
Screenshot_2017-11-15-17-04-47_com.dongmango.gou2.png
大致效果是這樣,向上滑動(dòng)奕枢,Tablayout能繼續(xù)選擇fragment ,
起初覺(jué)得這樣嵌套好幾層布局會(huì)出問(wèn)題,最后寫(xiě)完,發(fā)現(xiàn)并沒(méi)有問(wèn)題,重寫(xiě)的Listview
@Override
public void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2,
MeasureSpec.AT_MOST);
super.onMeasure(widthMeasureSpec, expandSpec);
}
重寫(xiě)的Gridview
@Override
public void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2,
MeasureSpec.AT_MOST);
super.onMeasure(widthMeasureSpec, expandSpec);
}
//通過(guò)重新dispatchTouchEvent方法來(lái)禁止滑動(dòng)
@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
// TODO Auto-generated method stub
if (ev.getAction() == MotionEvent.ACTION_MOVE) {
return true;//禁止Gridview進(jìn)行滑動(dòng)
}
return super.dispatchTouchEvent(ev);
}
然后就是下拉能加載的Scrollview
public class Scrollviewfresh extends ScrollView {
private OnScrollToBottomListener onScrollToBottom;
public Scrollviewfresh(Context context) {
super(context);
// TODO Auto-generated constructor stub
}
public Scrollviewfresh(Context context, AttributeSet attrs) {
super(context, attrs);
// TODO Auto-generated constructor stub
}
public Scrollviewfresh(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
// TODO Auto-generated constructor stub
}
@Override
protected void onOverScrolled(int scrollX, int scrollY, boolean clampedX,
boolean clampedY) {
// TODO Auto-generated method stub
super.onOverScrolled(scrollX, scrollY, clampedX, clampedY);
if (scrollY != 0 && null != onScrollToBottom) {
onScrollToBottom.onScrollBottomListener(clampedY);
}
}
public void setOnScrollToBottomLintener(OnScrollToBottomListener listener) {
onScrollToBottom = listener;
}
public interface OnScrollToBottomListener {
public void onScrollBottomListener(boolean isBottom);
}
這個(gè)下拉加載的scrollview 姑荷,需要再下拉的時(shí)候做下判斷,
svDisplay.setOnScrollToBottomLintener(new Scrollviewfresh.OnScrollToBottomListener() {
@Override
public void onScrollBottomListener(boolean isBottom) {
isboolean = isBottom + "";
if (isboolean.equals("true") && isOk.equals("false")) {
isOk = "true";
page++;
httpList();
}
}
});
通過(guò)兩個(gè)boolean來(lái)做判斷锣枝,第一個(gè)isboolean判斷是否滑動(dòng)到最底部厢拭,第二個(gè)就是用來(lái)判斷網(wǎng)絡(luò)請(qǐng)求是否成功,否則會(huì)一直加載網(wǎng)絡(luò)請(qǐng)求撇叁,導(dǎo)致數(shù)據(jù)重復(fù),
HttpJsonUtil.getShop_New_Goods(shop_id, page + "", 10001, new HttpManager.OnHttpResponseListener() {
@Override
public void onHttpResponse(int requestCode, String resultJson, Exception e) {
if (0 == GetJsonUtil.getResponseCode(resultJson)) {
String json = GetJsonUtil.getResponseData(resultJson);
bindListData(JSON.parseArray(json, ShopNewGoodsBean.class));
if (JSON.parseArray(json, ShopDetailGoodsBean.class).size() == 0) {//沒(méi)有更多數(shù)據(jù)了畦贸,不能繼續(xù)加載
isboolean = "false";
isOk = "true";
} else {
isboolean = "false";
isOk = "false";
}
} else {
showShortToast(GetJsonUtil.getResponseError(resultJson));
}
至此陨闹,基本上的一個(gè)多嵌套布局,加上一個(gè)下拉加載已經(jīng)做完了薄坏,具體的填充adapter趋厉,就不貼上去了