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 ...
随机推荐
- java进阶学习的一些思路
搞 Java 的年薪 40W 是什么水平? - 乔戈里的回答 - 知乎 https://www.zhihu.com/question/31437847/answer/566852748 在知乎上看了他 ...
- Ajax提交表单初接触
<!doctype html> <html class="no-js"> <head> <meta charset="utf-8 ...
- AngularJS 1.x系列:AngularJS控制器(3)
1. 控制器(Controller)定义 控制器(Controller)在AngularJS中作用是增强视图(View),AngularJS控制器是一个构造方法,用来向视图(View)中添加额外功能. ...
- .class和.getClass()的区别
使用指定类初始化日志对象,在日志输出的时候,可以打印出日志信息所在类 如: getClass() 返回此 Object 的运行时类. //需要有com.lpx.test.class这个类 Logger ...
- 题解 UVA1567 【A simple stone game】
题目大意 一堆石子有n个,首先第一个人开始可以去1~
- 工作环境换成Ubuntu18.04小记
Linux汇总:https://www.cnblogs.com/dunitian/p/4822808.html#linux Ubuntu常用软件安装(小集合)http://www.cnblogs.co ...
- 第四章:条件语句(if)和循环结构(while)
1.流程控制 含义与作用 Python程序执行,一定按照某种规律在执行 a.宏观一定是自上而下(逻辑上方代码一定比逻辑下方代码先执行):顺序结构b.遇到需要条件判断选择不同执行路线的执行方式:分支结构 ...
- elasticsearch简单实现
初次接触分布式是全文搜索引擎,之前都是spinx+coreseek,先简单实现初步了解先 官方文档:https://www.elastic.co/guide/cn/elasticsearch/guid ...
- 如何解决Angular网页内嵌推特时间线无法正常显示
我最近解决了一个折磨了我好久但是解决方法却只是添加两三行代码的问题.我没有在网上找到合适的解决方案,最后是我根据官方网站和很多的帖子里的部分代码得到的启发,尝试了很久之后得到的解决方法.因为过程实在是 ...
- js常用数据类型(Number,String,undefined,boolean) 引用类型( function,object,null ),其他数据类型( 数组Array,时间Date,正则RegExp ),数组与对象的使用
js常用数据类型 数字类型 | 字符串类型 | 未定义类型 | 布尔类型 typeof()函数查看变量类型 数字类型 Number var a1 = 10; var a2 = 3.66; conso ...