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>
主界面布局
public class MainActivity extends AppCompatActivity {
private ListView lv;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
lv = (ListView)findViewById(R.id.lv);
/*--------------context,data,条目布局,null,null-------------*/
lv.setAdapter(new MyAdapter(this));
}
}
主界面代码
package com.jing.www.tabledemo; import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView; /**
* Created by Administrator on 2017/6/7.
*/ public class MyAdapter extends BaseAdapter {
private Context context;
private final LayoutInflater mInflater; public MyAdapter(Context context) {
this.context=context;
mInflater = LayoutInflater.from(context); } /*--------------列表的总条目数-------------*/
@Override
public int getCount() {
return 20;
} /*--------------获取数据集中与列表对应的数据项-------------*/
@Override
public Object getItem(int position) { return position;
} /*--------------获取列表的position-------------*/
@Override
public long getItemId(int position) {
return position;
} /*--------------获取列表的view-------------*/
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder = null;
//如果缓存convertView为空,则需要创建View
if(convertView == null)
{
holder = new ViewHolder();
//根据自定义的Item布局加载布局
convertView =mInflater.inflate(R.layout.list_item, null);
holder.tv1 = (TextView) convertView.findViewById(R.id.clumn1);
holder.tv2 = (TextView) convertView.findViewById(R.id.clumn2);
holder.tv3=(TextView) convertView.findViewById(R.id.clumn3);
holder.tv4 = (TextView) convertView.findViewById(R.id.clumn4);
holder.tv5 = (TextView) convertView.findViewById(R.id.clumn5); //将设置好的布局保存到缓存中,并将其设置在Tag里,以便后面方便取出Tag
convertView.setTag(holder);
}else
{
holder = (ViewHolder)convertView.getTag();
}
holder.tv1.setText("你好");
return convertView;
} class ViewHolder {
public TextView tv1;
public TextView tv2;
public TextView tv3;
public TextView tv4;
public TextView tv5; }
}
适配器代码
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal"
>
<TextView
android:id="@+id/clumn1"
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="match_parent"
android:text="10001"
android:gravity="center"/>
<View
android:layout_width="0.5px"
android:layout_height="fill_parent"
android:background="#B8B8B8"
android:visibility="visible" />
<TextView
android:id="@+id/clumn2"
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="match_parent"
android:text="易记天天理财A"
android:gravity="center"/>
<View
android:layout_width="0.5px"
android:layout_height="fill_parent"
android:background="#B8B8B8"
android:visibility="visible" /> <TextView
android:id="@+id/clumn3"
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="match_parent"
android:text="1"
android:gravity="center"/>
<View
android:layout_width="0.5px"
android:layout_height="fill_parent"
android:background="#B8B8B8"
android:visibility="visible" /> <TextView
android:id="@+id/clumn4"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:text="101"
android:gravity="center"/>
<View
android:layout_width="0.5px"
android:layout_height="fill_parent"
android:background="#B8B8B8"
android:visibility="visible" /> <TextView
android:id="@+id/clumn5"
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="match_parent"
android:text="股票型"
android:gravity="center"/> </LinearLayout>
子条目布局
3.功能扩展,在原有基础上实现表格各行颜色的渲染(颜色的交互)
首先要知道listview的工作原理,每次得到一个item,listview都会通过getview来绘制一个item,在getview方法中,可以设置这个item的各种属性,如颜色,布局等等。
public View getView(final int position, View convertView, ViewGroup parent){
//第一个参数position为listview的item序号,每个item的序号都是不同的。
//第二个参数convertView为View的缓存,当listview的item过多时,拖动会遮住一部分item,被遮住的item的view就是convertView保存着。
// 第三个参数parent表示是一个ViewGroup(view组)
}
效果图(瞬间感觉穿上了衣服)

只需要修改getView即可
/*--------------获取列表的view-------------*/
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder = null;
//如果缓存convertView为空,则需要创建View
if(convertView == null)
{
holder = new ViewHolder();
//根据自定义的Item布局加载布局
convertView =mInflater.inflate(R.layout.list_item, null);
holder.tv1 = (TextView) convertView.findViewById(R.id.clumn1);
holder.tv2 = (TextView) convertView.findViewById(R.id.clumn2);
holder.tv3=(TextView) convertView.findViewById(R.id.clumn3);
holder.tv4 = (TextView) convertView.findViewById(R.id.clumn4);
holder.tv5 = (TextView) convertView.findViewById(R.id.clumn5); //将设置好的布局保存到缓存中,并将其设置在Tag里,以便后面方便取出Tag
convertView.setTag(holder);
}else
{
holder = (ViewHolder)convertView.getTag();
}
holder.tv1.setText("你好");
int[] colors = { Color.WHITE, Color.rgb(219, 238, 244) };//RGB颜色 convertView.setBackgroundColor(colors[position % 2]);// 每隔item之间颜色不同
return convertView;
}
Android 杂谈---ListView 之BaseAdapter的更多相关文章
- Android杂谈--ListView之BaseAdapter的使用
话说开发用了各种Adapter之后感觉用的最舒服的还是BaseAdapter,尽管使用起来比其他适配器有些麻烦,但是使用它却能实现很多自己喜欢的列表布局,比如ListView.GridView.Gal ...
- [转]Android杂谈--ListView之BaseAdapter的使用
本文转自:http://blog.csdn.net/tianshuguang/article/details/7344315 话说开发用了各种Adapter之后感觉用的最舒服的还是BaseAdapte ...
- 43.Android之ListView中BaseAdapter学习
实际开发中个人觉得用的比较多是BaseAdapter,尽管使用起来比其他适配器有些麻烦,但是使用它却能实现很多自己喜欢的列表布局,比如ListView.GridView.Gallery.Spinner ...
- android 中listview之BaseAdapter的使用
Listview控件不像其他安卓控件那种直接拖拽到界面上就能用,而是采用类似J2EE中的MVC模型的方式使用,需要通过适配器将某种样式的数据或控件添加到其上而使用. MVC模型实现原理是 数据模型M( ...
- Android中ListView通过BaseAdapter实现数据的绑定
1. public class ListFiles extends Activity { ListView Listview=null; protected void onCreate(Bundle ...
- Android关于listView的BaseAdapter以及getView的三级优化
1.4个重写方法的含义 自定义Adapter继承自BaseAdapter(通用适配器) getCount(); getItem(); getItemId(); getViewTypaCount() ...
- Android使用listView,BaseAdapter实现列表页
参考: 1.讲解很详细: blog.csdn.net/psuaije/article/details/7447391 总结: 代码:
- 转--Android实现ListView过滤功能,继承于BaseAdapter,非ArrayAdapter。
其实实现ListView过滤功能最方便的便是使用ArrayAdapter,里面自带的getFilter()方法能很方便的实现此功能,但是在实际的开发中,一般都是继承于BaseAdapter.还有一种是 ...
- Android 中万能的 BaseAdapter(Spinner,ListView,GridView) 的使用!
大家好!今天给大家讲解一下BaseAdapter(基础适配器)的用法,适配器的作用主要是用来给诸如(Spinner,ListView,GridView)来填充数据的.而(Spinner,ListVie ...
随机推荐
- centos7之zabbix3.2搭建
环境介绍: centos7.4 zabbix3.2 一.zabbix介绍 zabbix官网:https://www.zabbix.com/ zabbix下载页面:https://www.zabbix. ...
- 前端jquery 获取select多选的值
当select设置属性multiple='multiple'时, option就可以多选了 那么我们如何获取所有被选中的option的值呢? 首先说明: $('select[name="m ...
- Python——Flask框架——电子邮件
一.框架(Flask-Mail) 安装 : pip install flask-mail 二.SMTP服务器的配置 配置 默认值 说明 MAIL_SERVER locallhost 电子邮件服务器的主 ...
- 【数学建模】MATLAB语法
一.向量.矩阵的表示和使用 format long %小数很多format short %默认4位小数format rat %显示最近的分数format short e %指数格式的数 尾数多少 e ...
- TortoiseGit安装、配置
1 TortoiseGit简介 tortoiseGit是一个开放的git版本控制系统的源客户端,支持Winxp/vista/win7.该软件功能和git一样 不同的是:git是命令行操作模式,tort ...
- BZOJ4643 卡常大水题 【Tarjan】
题目分析: 给所有边按A排序,依次加入再按B递增排序,势能分析可以发现是O(n^4)的 代码: #include<bits/stdc++.h> using namespace std; ; ...
- java extends和implements区别
一.作用说明 extends 是继承某个类, 继承之后可以使用父类的方法, 也可以重写父类的方法; implements 是实现多个接口, 接口的方法一般为空的, 必须重写才能使用 二.补充 JAVA ...
- windows 下搭建 git 服务器 gogs
本文基于 windows7 64位 搭建 gogs gogs 官方文档地址:https://gogs.io/docs软件下载地址:https://dl.gogs.io/ 环境要求 数据库(选择以下一项 ...
- 位运算之——按位与(&)操作——(快速取模算法)
学习redis 字典结构,hash找槽位 求槽位的索引值时,用到了 hash值 & sizemask操作, 其后的scan操作涉及扫描顺序逻辑,对同模的槽位 按一定规则扫描! 其中涉及位运算 ...
- Lua语法基础(二)
1. 函数 1.1 函数声明 默认为全局 局部函数使用local关键字声明 1.2 参数 ...等同于Python中*args三个点表示可变参数 1.3 获取参数长度的两种方式 (1)将传入的参数.. ...