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

首頁 > 系統 > Android > 正文

Android ListView填充數據的方法

2019-10-22 18:28:36
字體:
來源:轉載
供稿:網友

Android ListView填充數據的方法

因為多人開發,為了是自己開發的模塊方便融合到主框架中,同時也為了減小apk的大小,要求盡可能少的使用xml的布局文件,開發中需要在ListView中顯示數據,網上查到的幾乎所有的示例,都是通過xml文件來為ListView的Item提供布局樣式,甚是不方便。

能不能將自己通過代碼創建的布局(如View,LinearLayout)等動態的布局到ListView呢?當然可以。

為了給ListView提供數據,我們需要為其設置一個適配,我們可以從BaseAdapter繼承,然后重寫它的getView方法,這個方法中有一個參數convertView,我們可以將它設置為我們自定義的視圖并返回,來實現加載用代碼定義好的布局。

定義一個LinearLayout布局,它是繼承自View的,所以可以通過getView返回(注意:不要為這個布局使用 LinearLayout.LayoutParams 參數,因為ListView不識別,他識別的是AbsListView LayoutParams

代碼如下:

public class PriceBoard extends LinearLayout {   private ListView listView;   private List items;   private LinearLayout.LayoutParams params;   public PriceBoard(Context context, AttributeSet attrs) {     super(context, attrs);     items = new ArrayList();     this.setOrientation(HORIZONTAL);     params = new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT);     listView = new ListView(context);     listView.setLayoutParams(params);     PriceBoardAdapter priceBoardAdapter = new PriceBoardAdapter(context);     listView.setAdapter(priceBoardAdapter);     addView(listView, params);   }   public void add(PriceData data){     PriceBoardItem item = new PriceBoardItem(this.getContext(),null);     item.setItem(data);     items.add(item);     params.setMargins(10,0,0,2); //    item.setLayoutParams(params);   }   public PriceBoardItem getItemView(int index){     return (PriceBoardItem)items.get(index);   }   private class PriceBoardItem extends LinearLayout{     private TextView nameView;     private TextView enCodeView;     private TextView priceView;     private PriceData priceData;     public PriceBoardItem(Context context, AttributeSet attrs) {       super(context, attrs);       this.setOrientation(HORIZONTAL);       nameView = new TextView(context);       nameView.setTextSize(TypedValue.COMPLEX_UNIT_PX,38);       enCodeView = new TextView(context);       enCodeView.setTextSize(TypedValue.COMPLEX_UNIT_PX,28);       priceView = new TextView(context);       priceView.setTextSize(TypedValue.COMPLEX_UNIT_PX,48);       priceView.setGravity(Gravity.CENTER);       setLayout();     }     public TextView getNameView(){       return nameView;     }     public TextView getEnCodeView(){       return enCodeView;     }     public TextView getPriceView(){       return priceView;     }     public PriceData getPriceData(){       return priceData;     }     private void setLayout(){       LayoutParams p = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT,1);       LinearLayout linearLayout = new LinearLayout(getContext());       linearLayout.setOrientation(VERTICAL);       linearLayout.addView(nameView,p);       linearLayout.addView(enCodeView,p);       addView(linearLayout, p);        p = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT,1);       linearLayout = new LinearLayout(getContext());       linearLayout.setOrientation(VERTICAL);       linearLayout.addView(priceView,p);       addView(linearLayout, p);     }     public void setItem(PriceData data){       priceData = data;     }   }   private class PriceBoardAdapter extends BaseAdapter{     private Context _context;     public PriceBoardAdapter(Context context){       _context = context;     }     public int getCount(){       return items.size();     }     public Object getItem(int position) {       return position;     }      @Override     public long getItemId(int position) {       return position;     }      @Override     public View getView(int position, View convertView, ViewGroup parent) {       PriceBoardItem view = getItemView(position);       PriceData data = ((PriceBoardItem) items.get(position)).getPriceData();       view.getNameView().setText(data.getName());       view.getEnCodeView().setText(data.getEnCode());       view.getPriceView().setText(String.valueOf(data.getPrice()));       convertView = view;       return convertView;     }   } 

調用:

PriceBoard priceBoard = new PriceBoard(context,null); priceData = new PriceData(); priceData.setName("現貨白銀"); priceData.setEnCode("Ag"); priceData.setPrice(4006); priceBoard.add(priceData); priceData = new PriceData(); priceData.setName("現貨銅"); priceData.setEnCode("Cu"); priceData.setPrice(43895); priceBoard.add(priceData); priceData = new PriceData(); priceData.setName("現貨鎳"); priceData.setEnCode("Ni"); priceData.setPrice(43895); priceBoard.add(priceData); addView(priceBoard); 

效果:

Android,ListView,ListView數據填充,ListView實現填充數據不使用布局

如有疑問請留言或者到本站社區交流討論,感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!


注:相關教程知識閱讀請移步到Android開發頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 白朗县| 四会市| 航空| 忻城县| 晋城| 腾冲县| 兴国县| 澄城县| 余姚市| 镇宁| 壤塘县| 邹城市| 故城县| 怀化市| 石渠县| 枣强县| 嵊州市| 安泽县| 樟树市| 荥经县| 南华县| 海林市| 盐城市| 南陵县| 阿坝| 全南县| 宜章县| 闸北区| 深水埗区| 安岳县| 丹巴县| 临夏县| 荆门市| 沾益县| 家居| 西宁市| 泰安市| 吉木乃县| 石台县| 长治县| 黑山县|