1. 概述
這篇文章主要記錄下自己在項(xiàng)目中的一個(gè)需求,如下圖所示:
圖片.png
這個(gè)是多家店鋪的每個(gè)店鋪的商品的購(gòu)物車(chē)界面,目前只是還沒(méi)有對(duì)應(yīng)店鋪名稱(chēng)清寇,需要下拉刷新和上拉加載更多露戒,針對(duì)于這樣的界面,自己采用的是ListView嵌套ListView的白嘁,外層的ListView有下拉刷新和上拉加載更多坑鱼,內(nèi)層是一個(gè)重寫(xiě) onMeasure()的自定義ListView,但是遇到了2個(gè)問(wèn)題:
問(wèn)題1:嵌套后权薯,外層ListView的下拉刷新失效姑躲;
問(wèn)題2:內(nèi)層的ListView的adapter中的 item中的button、TextView盟蚣、checkbox等控件的點(diǎn)擊事件失效黍析;
問(wèn)題3:外層的listview的 setOnItemClickListener失效;
2. 解決方案如下
1>:解決問(wèn)題1:重寫(xiě)內(nèi)層自定義的ListView的 onInterceptTouchEvent返回false屎开,讓內(nèi)層的ListView不要攔截父控件ListView的下拉刷新事件阐枣;
2>:解決問(wèn)題2:重寫(xiě)onTouchEvent返回false,表示沒(méi)有消費(fèi)事件,事件會(huì)以冒泡方式傳遞到 最上層的 view 或者 activity蔼两,如果最上邊的 view 或者 activity沒(méi)有處理甩鳄,還是 返回 false,該事件將消失额划。接下來(lái)的所有事件都會(huì)被 最上層的view 的 onTouchEvent捕獲妙啃,具體可參照我之前文章;
/**
* Email: 2185134304@qq.com
* Created by Novate 2018/8/18 9:40
* Version 1.0
* Params:
* Description: 內(nèi)存ListView
*/
public class ChildLiistView extends ListView {
public ChildLiistView(Context context) {
super(context);
// TODO Auto-generated constructor stub
}
public ChildLiistView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
// TODO Auto-generated constructor stub
}
public ChildLiistView(Context context, AttributeSet attrs) {
super(context, attrs);
// TODO Auto-generated constructor stub
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2,
MeasureSpec.AT_MOST);
super.onMeasure(widthMeasureSpec, expandSpec);
}
/*********************** 不要攔截父控件ListView的下拉刷新事件 start *************************/
/*@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
return false;
}
*/
/**
* 為了讓ChildListView的adapter中的控件可以觸發(fā)點(diǎn)擊事件
*/
@Override
public boolean onTouchEvent(MotionEvent ev) {
return false;
}
/**
* 為了讓外層的AutoListView可以下拉刷新
*/
@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
return false;
}
/*********************** 不要攔截父控件ListView的下拉刷新事件 end *************************/
}
3>:解決問(wèn)題3:
a:在子ListView的 adapter的 item布局文件的 根布局的 LinearLayout中添加屬性:
android:descendantFocusability="blocksDescendants"
b:然后在 父 ListView的布局文件中添加屬性:
android:focusable="false"
即可俊戳。
可以參照這篇文章:
https://blog.csdn.net/XiaoRouniao/article/details/73369423