zoukankan      html  css  js  c++  java
  • 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的优化

  • 相关阅读:
    AD7606笔记
    转Keil 中使用 STM32F4xx 硬件浮点单元
    旋转编码器
    PT100/PT1000
    电压跟随器
    段式液晶驱动方法
    物联网的架构
    物联网的操作系统
    C8051开发环境
    解决time命令输出信息的重定向问题
  • 原文地址:https://www.cnblogs.com/fanfusuzi/p/6956706.html
Copyright © 2011-2022 走看看