国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

工作小記~~~使用LinearLayout實(shí)現(xiàn)仿ListView(解決嵌套ListView顯示不全)

2019-11-09 16:01:33
字體:
供稿:網(wǎng)友

使用LinearLayout實(shí)現(xiàn)仿ListView(解決嵌套ListView顯示不全)

滑動(dòng)控件嵌套ListView時(shí)就會(huì)出現(xiàn)ListView中的數(shù)據(jù)顯示不全的現(xiàn)象,這時(shí)我們就會(huì)想到嵌套NoScrollListView去實(shí)現(xiàn)。功能是可以實(shí)現(xiàn)但是在列表中使用NoScrollListView的話會(huì)出現(xiàn)滑動(dòng)卡頓的現(xiàn)象。 因?yàn)镹oScrollListView是在顯示前計(jì)算好高度顯示的,所以如果在顯示前隱藏了控件顯示后再去顯示該控件就會(huì)造成內(nèi)容顯示不全。我們可以自定義的LinearLayout做一個(gè)仿ListView的控件。既然是仿ListView那我們除了自定義控件之外,我們還需要自定義一個(gè)Adapter。

自定義LinearLayout代碼public class CustomNoScrollListView extends LinearLayout { PRivate CustomAdapter mAdapter; public CustomNoScrollListView(Context context) { super(context); setOrientation(LinearLayout.VERTICAL); } public CustomNoScrollListView(Context context, AttributeSet attrs) { super(context, attrs); setOrientation(LinearLayout.VERTICAL); } public CustomNoScrollListView(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); setOrientation(LinearLayout.VERTICAL); } public void setAdapter(CustomAdapter adapter) { if (adapter == null) { throw new NullPointerException("CustomAdapter is null, please check setAdapter(CustomAdapter adapter)..."); } mAdapter = adapter; adapter.setOnNotifyDataSetChangedListener(new CustomAdapter.OnNotifyDataSetChangedListener() { @Override public void OnNotifyDataSetChanged() { notifyDataSetChanged(); } }); adapter.notifyDataSetChanged(); } public CustomAdapter getAdapter() { return mAdapter; } private void notifyDataSetChanged() { removeAllViews(); if (mAdapter == null || mAdapter.getCount() == 0) { return; } LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT); for (int i = 0; i < mAdapter.getCount(); i++) { final int index = i; View view = mAdapter.getView(index); if (view == null) { throw new NullPointerException("item layout is null, please check getView()..."); } addView(view, index, layoutParams); } }}自定義Adapter代碼public abstract class CustomAdapter { public abstract int getCount(); public abstract Object getItem(int i); public abstract long getItemId(int i); public abstract View getView(int i); public void notifyDataSetChanged(){ if(null != mOnNotifyDataSetChangedListener){ mOnNotifyDataSetChangedListener.OnNotifyDataSetChanged(); } } /** * 釋放一個(gè)接口 串聯(lián)adapter與view中間的數(shù)據(jù)刷新 */ public interface OnNotifyDataSetChangedListener{ void OnNotifyDataSetChanged(); } private OnNotifyDataSetChangedListener mOnNotifyDataSetChangedListener; public void setOnNotifyDataSetChangedListener(OnNotifyDataSetChangedListener listener){ mOnNotifyDataSetChangedListener = listener; }}

其實(shí)可以把Adapter的代碼定義到View中,分開定義是為了替換ListView或NoScrollListView時(shí)方便。

使用方法與ListView一樣直接調(diào)用setAdapter()設(shè)置自定義的適配器,刷新數(shù)據(jù)使用adapter的notifyDataSetChanged()方法


發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 绥化市| 米易县| 申扎县| 巴彦县| 阿克陶县| 监利县| 循化| 襄垣县| 江陵县| 永顺县| 安阳市| 永川市| 吴桥县| 苏尼特右旗| 沈丘县| 郧西县| 涿鹿县| 花莲市| 云龙县| 卢湾区| 沧源| 靖江市| 淮滨县| 崇信县| 海伦市| 宜丰县| 丰都县| 上高县| 庆安县| 张北县| 通辽市| 遵化市| 同心县| 镇平县| 东乌珠穆沁旗| 棋牌| 德清县| 巴彦淖尔市| 锦屏县| 宁城县| 和平区|