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

首頁 > 學院 > 開發設計 > 正文

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

2019-11-09 14:51:04
字體:
來源:轉載
供稿:網友

使用LinearLayout實現仿ListView(解決嵌套ListView顯示不全)

滑動控件嵌套ListView時就會出現ListView中的數據顯示不全的現象,這時我們就會想到嵌套NoScrollListView去實現。功能是可以實現但是在列表中使用NoScrollListView的話會出現滑動卡頓的現象。 因為NoScrollListView是在顯示前計算好高度顯示的,所以如果在顯示前隱藏了控件顯示后再去顯示該控件就會造成內容顯示不全。我們可以自定義的LinearLayout做一個仿ListView的控件。既然是仿ListView那我們除了自定義控件之外,我們還需要自定義一個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(); } } /** * 釋放一個接口 串聯adapter與view中間的數據刷新 */ public interface OnNotifyDataSetChangedListener{ void OnNotifyDataSetChanged(); } private OnNotifyDataSetChangedListener mOnNotifyDataSetChangedListener; public void setOnNotifyDataSetChangedListener(OnNotifyDataSetChangedListener listener){ mOnNotifyDataSetChangedListener = listener; }}

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

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


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 城市| 杭州市| 平邑县| 江山市| 根河市| 铁岭县| 巨野县| 黎城县| 成武县| 西和县| 淄博市| 大洼县| 陇西县| 泾源县| 深州市| 望奎县| 台江县| 东乡族自治县| 奇台县| 乐安县| 新昌县| 平和县| 河津市| 新建县| 杭锦旗| 客服| 清水河县| 常熟市| 交口县| 修文县| 尚志市| 兴山县| 来安县| 阜新市| 饶平县| 永兴县| 叶城县| 包头市| 上杭县| 兰州市| 时尚|