android listview 数据保存,Android ListView填充数据的方法

  • Post author:
  • Post category:其他


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

效果:

312fe71811c097f43823425c6d132e6b.png

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