首页 > 系统 > Android > 正文

Android ListView填充数据的方法

2019-12-12 02:06:19
字体:
来源:转载
供稿:网友

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); 

效果:

如有疑问请留言或者到本站社区交流讨论,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表