zoukankan      html  css  js  c++  java
  • 定制ListView的界面(让列表中不仅有文字还有图片fruitImage.setImageResource(fruit.getImageId());)

    1.定义自己的实体类来作为ListView的适配类型如:

    public class Fruit {
    private String name;//水果的名字
    private int imageId;//水果的图片资源
    public Fruit(String name,int imageId)
    {
    this.name=name;
    this.imageId=imageId;
    }
    public String getName()
    {
    return name;
    }
    public int getImageId()
    {
    return imageId;
    }
    }

    2.新建一个布局页面(在layout文件夹下放入fruit_item.xml)其中加入一个imageView控件显示图片,再加入一个TextView显示名字
    <ImageView
    android:id="@+id/fruit_image"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    />
    <TextView
    android:id="@+id/fruit_name"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="center_vertical"
    android:layout_marginLeft="10dp"
    />

    3.自定义一个适配器类,此类继承ArrayAdapter并将此类的泛型指定为Fruit接受刚刚的Fruit类
    public class FruitAdapter extends ArrayAdapter<Fruit>{
    private int resourceId;
    public FruitAdapter(Context context, int textViewResourceId, List<Fruit> objects)//重写了getView的方法可以将上下文,ListView的布局的id和数据传进来
    {
    super(context,textViewResourceId,objects);//就是这三个东西
    resourceId=textViewResourceId;
    }
    @Override
    public View getView(int position, View convertView, ViewGroup parent)
    {
    Fruit fruit=getItem(position);//在每个子项被滚到屏幕内时调用这个方法,获取这个水果的实例
    View view= LayoutInflater.from(getContext()).inflate(resourceId,parent,false);//传入利用inflate传入布局此方法含有三个参数第三个参数指不让此布局在此界面中生效,
    ImageView fruitImage=(ImageView)view.findViewById(R.id.fruit_image);//在刚刚获取到的布局中,再获取listVIew和ImageView
    TextView fruitName=(TextView) view.findViewById(R.id.fruit_name);
        fruitImage.setImageResource(fruit.getImageId());//将图片和名字放入其中
         fruitName.setText(fruit.getName());
         return view;//返回布局
        }
    }

    4.在主方法中写一个初始化Fruit类的函数传入各种数据
    将适配器实例化传入三参
    蒋listView实例化将适配器传入
    private  void initFruits()

    5对于ListView的优化
    1.对于滚动时不断调用getView()方法的优化
    调用convertView方法来缓存布局
    Fruit fruit=getItem(position);
    View view;
    if(convertView==null)
    {
    view=LayoutInflater.from(getContext()).inflate(resourceId,parent,false);
    }
    else{
    view=convertView;
    }
    判断ConverView是否为空,不空就直接重用,空的话就去加载布局
    2.第二个优化,对于getView中的findViewById()方法重复调用,借助ViewHolder来优化
    ViewHolder是一个内部定义的类将控件的实例都放在Viewholder里.并借用setTag()方法来放入View中,也就是所有的实例都保存在viewHolder中


  • 相关阅读:
    如何使用sendEmail发送邮件
    Linux curl命令详解
    linux比较两个文件是否一样(linux命令md5sum使用方法)
    strace命令用法详解
    strace用法说明
    ORA-12154 TNS无法解析指定的连接标识符
    VNC远程连接阿里云Linux服务器 图形界面
    pycharm配置Git 代码管理
    FireFox浏览器-xpath快速定位插件:Xpath Checker
    odoo 前端模板引擎 Qweb
  • 原文地址:https://www.cnblogs.com/1521681359qqcom/p/9963435.html
Copyright © 2011-2022 走看看