解決ScrollView或ListView中嵌套ListView引起的沖突

老生常談的滑動沖突問題,今天遇到與大家分享下

1、在ScrollView或ListView等滑動控件中嵌套ListView時,往往會導(dǎo)致ListView顯示不完整,只顯示一條數(shù)據(jù),想使ListView顯示完整可以通過重寫ListView的onMeasure方法來解決:

public class CustomListView extends ListView {

public CustomListView(Context context) {

super(context);

}

public CustomListView(Context context, AttributeSet attrs) {

super(context, attrs);

}

@Override

protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {

int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2,? MeasureSpec.AT_MOST);

super.onMeasure(widthMeasureSpec, expandSpec);

}

}

2、除此外還有一種解決方法:根據(jù)ListView子項(xiàng)重置其高度。

java代碼:

/**

* 重新計(jì)算ListView的高度,解決ScrollView和ListView兩個View都有滾動的效果,在嵌套使用時起沖突的問題

* @param listView

*/

public void setListViewHeight(ListView listView) {

// 獲取ListView對應(yīng)的Adapter

ListAdapter listAdapter = listView.getAdapter();

if (listAdapter == null) {

return;

}

int totalHeight = 0;

for (int i = 0, len = listAdapter.getCount(); i < len; i++) { // listAdapter.getCount()返回數(shù)據(jù)項(xiàng)的數(shù)目

View listItem = listAdapter.getView(i, null, listView);

listItem.measure(0, 0); // 計(jì)算子項(xiàng)View 的寬高

totalHeight += listItem.getMeasuredHeight(); // 統(tǒng)計(jì)所有子項(xiàng)的總高度

}

ViewGroup.LayoutParams params = listView.getLayoutParams();

params.height = totalHeight + (listView.getDividerHeight() * (listAdapter.getCount() - 1));

listView.setLayoutParams(params);

}

在設(shè)置ListView的Adapter填充數(shù)據(jù)后調(diào)用此方法便可。

但是要注意的是,子ListView的每個Item必須是LinearLayout,不能是其他的,因?yàn)槠渌腖ayout(如RelativeLayout)沒有重寫onMeasure(),所以會在onMeasure()時拋出異常。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容