ListView

来源:互联网 发布:火石软件招聘 编辑:程序博客网 时间:2024/05/16 14:43

ListView

  • ListView继承AdapterView
  • Adapter
    • AarrayAdapter
    • SimpleAdapter
    • BaseAdapter
    • SimpleCursorAdapter
    • PageAdapter
    • BaseExpandableListAdapter
  • Data
    • Collection 建议用集合
  • AdapterView显示的过程就是凑齐三要素的过程!

ListView的属性

- android:entries:直接填充values-string文件夹中string-array数据,使用它填充数据,使数据固定化了,不容易动态操作!- android:divider:分割线的背景(颜色、图片)- android:dividerHeight:分割线的高度- android:footerDividersEnabled- android:headerDividersEnabled

ListView配合三要素显示!并且添加头视图、足视图、空视图

  • 添加头视图:addHeaderView(View view)
    • 一般直接展示本ListView中最为重要的内容
  • 添加足视图:addFooterView(View view)
    • 一般用于广告展示
  • 设置空视图:setEmptyView(View view)
    • 作用:
      • 当ListView数据为空的时候!会显示空视图的内容!
      • 当使用了空视图,并且ListView没有数据,那么头视图和足视图也不会显示!
  • 注意:尽量把以上三个操作放在setAdapter之前
  • View的来源
    • Java代码中创建
      • ImageView iv = new ImageView(Context)
        iv.setLayoutParams(new LayoutParams(参数1,参数2))
      • 注意:设置宽和高
      • 设置LayoutParams导包时候如何导
        • new LayoutParams(参数1,参数2)
        • 参数1:宽
        • 参数2:高
        • 宽高可以直接设置值,单位为px
        • 此设置属性的控件将要添加控件的类型
        • ImageView—>ListView导入AbsListView包的LayoutParams
        • ImageView—>LinearLayout导入ViewGroup包的LayoutParams
    • Layout转成View
      • LayoutInflate.from(Context).inflate(参数1,参数2)
      • 参数1:要转化的布局
      • 参数2:父布局的来源

ListView结合SimpleAdapter使用

  • SimpleAdapter一般用于图文混排并且数据是来源于本地!
  • SimpleAdapter adapter = new SimpleAdapter(参数1,参数2,参数3,参数4,参数5)
  • 参数1:Context
  • 参数2:数据源,List<Map<String,Object>>
  • 参数3:单挑布局文件
  • 参数4:from,map的key,new String[]{}
  • 参数5:to,map的key对应的value,对应单挑布局的控件的id,new int[]{}
  • 问题:SimpleAdapter能加载网络图片么?
    • 使用ViewBinder在外部修改单条控件显示的内容!
    • 使用:
      • setViewBinder(new ViewBinder() {
        // 第一个参数:单条布局内的控件
        // 第二个参数:单条控件对应的数据
        // 第三个参数:安全数据!它本身和参数2相同!但是永远不为空!
        // 返回值:true,自己添加数据,SimpleAdapter不会处理控件
        false,正常执行!SimpleAdapter会对控件赋值!
        @Override
        public boolean setViewValue(View view, Object data,
        String textRepresentation) {
        return boolean;
        }
    • 注意:
      • ViewBinder能使用的范围:它只能使用在SimpleAdapter、SimpleCursorAdapter
      • ViewBinder如果自行修改了显示内容!AdapterView本身的单条点击事件取值会受到影响!

ListView结合BaseAdapter

  • ListView优化
  • 实现完全自定义Adapter
  • 优势:能实现完全自定义
  • 缺点:实现起来有点复杂
  • 教学目标:完全熟练!!!
  • BaseAdapter的使用
    • 创建一个类去继承BaseAdapter
    • 添加未实现的方法
      • getCount():返回显示的总条目,由数据决定,如果此处返回值是0,那么其他方法不会执行,此方法需要进行非空判断
      • getItem():返回单条数据,建议把返回值类型改为List的泛型
      • getItemId():返回ListView单条视图的Id
      • getView():此方法是BaseAdapter最为重要的一个方法!此方法多次调用!但是每次调用的position都不相同!开发者需要在此方法中,返回装好数据的视图!必须要考虑优化问题!
    • 注意事项:
      • getCount()需要添加非空判断,注意写法
      • getView()方法需要return ConvertView
      • getView()方法中convertView不要忘记setTag();
  • ListView优化写法
    • ListView宽高写成定值(包括充满父布局),防止多次调用加载
    • ListView自身优化!ListView默认只会加载一屏的数据!
    • 利用Android回收机制,服用ConvertView!
    • 定义ViewHolder类,防止重复查找控件!convertView.setTag()、convertView.getTag()

面试问题

  • ListView第几次加载Item的时候,ConvertView不会为空!
    • 第二次加载Item的时候,不会为空!
0 0
原创粉丝点击