国产探花免费观看_亚洲丰满少妇自慰呻吟_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()方法


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 六枝特区| 大英县| 临海市| 和硕县| 肇州县| 名山县| 易门县| 伊金霍洛旗| 大竹县| 宁都县| 大同县| 旬邑县| 囊谦县| 全椒县| 桓台县| 兰溪市| 崇仁县| 正定县| 东港市| 涿鹿县| 江门市| 搜索| 蕉岭县| 利辛县| 大英县| 托克逊县| 石首市| 巧家县| 麟游县| 汾西县| 新昌县| 阿荣旗| 河西区| 西青区| 南木林县| 白银市| 叙永县| 德惠市| 桂林市| 湘西| 镇平县|