Android 杂谈---ListView 之BaseAdapter

前言

几种适配器里面相对来说比较简单的一种适配器,在使用时需要实现几个方法,并且也需要对convertView进行优化

此篇文章以使用listView与BaseAdapter来实现表格样式的布局举例(表格布局的实现也可以使用grideView).

效果图如下

大致思路

1.在主布局中添加表格头标题和listView

2.在子条目中添加多个水平的textView来进行列的显示,使用view来进行竖线的绘制

 

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.jing.www.tabledemo.MainActivity">
    <LinearLayout
        android:orientation="horizontal"
        android:layout_width="match_parent"
        android:layout_height="20dp"
        >
        <TextView
            android:layout_width="0dp"
            android:layout_weight="1"
            android:layout_height="20dp"
            android:text="基金代码"
            android:gravity="center"/>
        <TextView
            android:layout_width="0dp"
            android:layout_weight="1"
            android:layout_height="20dp"
            android:text="基金名称"
            android:gravity="center"/>
        <TextView
            android:layout_width="0dp"
            android:layout_weight="1"
            android:layout_height="20dp"
            android:text="单位净值"
            android:gravity="center"/>
        <TextView
            android:layout_width="0dp"
            android:layout_weight="1"
            android:layout_height="20dp"
            android:text="累计净值"
            android:gravity="center"/>
        <TextView
            android:layout_width="0dp"
            android:layout_weight="1"
            android:layout_height="20dp"
            android:text="基金类型"
            android:gravity="center"
            />


    </LinearLayout>

<ListView
    android:id="@+id/lv"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">
</ListView>



</LinearLayout>
主界面布局
 1 public class MainActivity extends AppCompatActivity {
 2 
 3     private ListView lv;
 4 
 5     @Override
 6     protected void onCreate(Bundle savedInstanceState) {
 7         super.onCreate(savedInstanceState);
 8         setContentView(R.layout.activity_main);
 9         lv = (ListView)findViewById(R.id.lv);
10 /*--------------context,data,条目布局,null,null-------------*/
11 
12         lv.setAdapter(new MyAdapter(this));
13     }
14 
15 
16 
17 }
主界面代码
 1 package com.jing.www.tabledemo;
 2 
 3 import android.content.Context;
 4 import android.view.LayoutInflater;
 5 import android.view.View;
 6 import android.view.ViewGroup;
 7 import android.widget.BaseAdapter;
 8 import android.widget.TextView;
 9 
10 /**
11  * Created by Administrator on 2017/6/7.
12  */
13 
14 public class MyAdapter extends BaseAdapter {
15     private  Context context;
16     private final LayoutInflater mInflater;
17 
18     public MyAdapter(Context context) {
19         this.context=context;
20         mInflater = LayoutInflater.from(context);
21 
22 
23     }
24 
25     /*--------------列表的总条目数-------------*/
26     @Override
27     public int getCount() {
28         return 20;
29     }
30 
31     /*--------------获取数据集中与列表对应的数据项-------------*/
32     @Override
33     public Object getItem(int position) {
34 
35         return position;
36     }
37 
38     /*--------------获取列表的position-------------*/
39     @Override
40     public long getItemId(int position) {
41         return position;
42     }
43 
44 
45     /*--------------获取列表的view-------------*/
46     @Override
47     public View getView(int position, View convertView, ViewGroup parent) {
48         ViewHolder holder = null;
49         //如果缓存convertView为空,则需要创建View
50         if(convertView == null)
51         {
52             holder = new ViewHolder();
53             //根据自定义的Item布局加载布局
54           convertView =mInflater.inflate(R.layout.list_item, null);
55             holder.tv1 = (TextView) convertView.findViewById(R.id.clumn1);
56             holder.tv2 = (TextView)  convertView.findViewById(R.id.clumn2);
57             holder.tv3=(TextView) convertView.findViewById(R.id.clumn3);
58             holder.tv4 = (TextView)  convertView.findViewById(R.id.clumn4);
59             holder.tv5 = (TextView)  convertView.findViewById(R.id.clumn5);
60 
61             //将设置好的布局保存到缓存中,并将其设置在Tag里,以便后面方便取出Tag
62             convertView.setTag(holder);
63         }else
64         {
65             holder = (ViewHolder)convertView.getTag();
66         }
67           holder.tv1.setText("你好");
68         return convertView;
69     }
70 
71     class ViewHolder {
72 public TextView tv1;
73 public TextView tv2;
74 public TextView tv3;
75 public TextView tv4;
76 public TextView tv5;
77 
78     }
79 }
适配器代码
 1 <?xml version="1.0" encoding="utf-8"?>
 2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 3     android:layout_width="match_parent"
 4     android:layout_height="match_parent"
 5     android:orientation="horizontal"
 6   >
 7     <TextView
 8         android:id="@+id/clumn1"
 9         android:layout_width="0dp"
10         android:layout_weight="1"
11         android:layout_height="match_parent"
12         android:text="10001"
13         android:gravity="center"/>
14     <View
15         android:layout_width="0.5px"
16         android:layout_height="fill_parent"
17         android:background="#B8B8B8"
18         android:visibility="visible" />
19     <TextView
20         android:id="@+id/clumn2"
21         android:layout_width="0dp"
22         android:layout_weight="1"
23         android:layout_height="match_parent"
24         android:text="易记天天理财A"
25         android:gravity="center"/>
26     <View
27         android:layout_width="0.5px"
28         android:layout_height="fill_parent"
29         android:background="#B8B8B8"
30         android:visibility="visible" />
31 
32     <TextView
33         android:id="@+id/clumn3"
34         android:layout_width="0dp"
35         android:layout_weight="1"
36         android:layout_height="match_parent"
37         android:text="1"
38         android:gravity="center"/>
39     <View
40         android:layout_width="0.5px"
41         android:layout_height="fill_parent"
42         android:background="#B8B8B8"
43         android:visibility="visible" />
44 
45     <TextView
46         android:id="@+id/clumn4"
47         android:layout_width="0dp"
48         android:layout_height="match_parent"
49         android:layout_weight="1"
50         android:text="101"
51         android:gravity="center"/>
52     <View
53         android:layout_width="0.5px"
54         android:layout_height="fill_parent"
55         android:background="#B8B8B8"
56         android:visibility="visible" />
57 
58     <TextView
59         android:id="@+id/clumn5"
60         android:layout_width="0dp"
61         android:layout_weight="1"
62         android:layout_height="match_parent"
63         android:text="股票型"
64         android:gravity="center"/>
65 
66 </LinearLayout>
子条目布局

 3.功能扩展,在原有基础上实现表格各行颜色的渲染(颜色的交互)

首先要知道listview的工作原理,每次得到一个item,listview都会通过getview来绘制一个item,在getview方法中,可以设置这个item的各种属性,如颜色,布局等等。

1 public View getView(final int position, View convertView, ViewGroup parent){
2 
3 //第一个参数position为listview的item序号,每个item的序号都是不同的。
4 
5 //第二个参数convertView为View的缓存,当listview的item过多时,拖动会遮住一部分item,被遮住的item的view就是convertView保存着。
6 
7 // 第三个参数parent表示是一个ViewGroup(view组)
8 
9 }

 

 效果图(瞬间感觉穿上了衣服)

只需要修改getView即可

 1     /*--------------获取列表的view-------------*/
 2     @Override
 3     public View getView(int position, View convertView, ViewGroup parent) {
 4         ViewHolder holder = null;
 5         //如果缓存convertView为空,则需要创建View
 6         if(convertView == null)
 7         {
 8             holder = new ViewHolder();
 9             //根据自定义的Item布局加载布局
10           convertView =mInflater.inflate(R.layout.list_item, null);
11             holder.tv1 = (TextView) convertView.findViewById(R.id.clumn1);
12             holder.tv2 = (TextView)  convertView.findViewById(R.id.clumn2);
13             holder.tv3=(TextView) convertView.findViewById(R.id.clumn3);
14             holder.tv4 = (TextView)  convertView.findViewById(R.id.clumn4);
15             holder.tv5 = (TextView)  convertView.findViewById(R.id.clumn5);
16 
17             //将设置好的布局保存到缓存中,并将其设置在Tag里,以便后面方便取出Tag
18             convertView.setTag(holder);
19         }else
20         {
21             holder = (ViewHolder)convertView.getTag();
22         }
23           holder.tv1.setText("你好");
24         int[] colors = { Color.WHITE, Color.rgb(219, 238, 244) };//RGB颜色
25 
26         convertView.setBackgroundColor(colors[position % 2]);// 每隔item之间颜色不同
27         return convertView;
28     }

博客:listView的优化

posted @ 2017-06-07 14:02  EugeniaGao  阅读(163)  评论(0编辑  收藏  举报