国产探花免费观看_亚洲丰满少妇自慰呻吟_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ā)表
主站蜘蛛池模板: 开封县| 徐汇区| 巴东县| 泽库县| 林甸县| 岚皋县| 阿拉尔市| 兴仁县| 丹东市| 阳春市| 宣化县| 永昌县| 安徽省| 禹城市| 醴陵市| 长垣县| 连云港市| 宜兴市| 宁晋县| 类乌齐县| 西和县| 渑池县| 三河市| 铁岭县| 大石桥市| 梅河口市| 客服| 大同县| 柏乡县| 康保县| 贺兰县| 呼图壁县| 建始县| 黎城县| 靖西县| 聊城市| 郑州市| 莱芜市| 焦作市| 长泰县| 济南市|