Android ListView填充数据的方法
时间:2022-07-28
本文章向大家介绍Android ListView填充数据的方法,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
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);
效果:
如有疑问请留言或者到本站社区交流讨论,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
- java教程
- Java快速入门
- Java 开发环境配置
- Java基本语法
- Java 对象和类
- Java 基本数据类型
- Java 变量类型
- Java 修饰符
- Java 运算符
- Java 循环结构
- Java 分支结构
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java 正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java 序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释
- Spring 一个接口多个实现类怎么注入
- ASP.NET MVC Controller的激活
- js 逗号表达式
- spring动态调用方法
- Spring AOP动态代理原理与实现方式
- 基于注解多数据源解决方案
- Java并发编程:CountDownLatch、CyclicBarrier和Semaphore
- 你需要实现一个高效的缓存,它允许多个用户读,但只允许一个用户写,以此来保持它的完整性,你会怎样去实现它?
- java阻塞队列得实现
- 谈谈如何利用 valgrind 排查内存错误
- 用java写一个死锁
- Runnable和Thread比较
- 使用@ConditionalOnProperty注解
- Java注解Annotation与自定义注解详解
- spring boot 配置多个DispatcherServlet