前言

几种适配器里面相对来说比较简单的一种适配器,在使用时需要实现几个方法,并且也需要对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;
}

博客:listView的优化

Android 杂谈---ListView 之BaseAdapter的更多相关文章

  1. Android杂谈--ListView之BaseAdapter的使用

    话说开发用了各种Adapter之后感觉用的最舒服的还是BaseAdapter,尽管使用起来比其他适配器有些麻烦,但是使用它却能实现很多自己喜欢的列表布局,比如ListView.GridView.Gal ...

  2. [转]Android杂谈--ListView之BaseAdapter的使用

    本文转自:http://blog.csdn.net/tianshuguang/article/details/7344315 话说开发用了各种Adapter之后感觉用的最舒服的还是BaseAdapte ...

  3. 43.Android之ListView中BaseAdapter学习

    实际开发中个人觉得用的比较多是BaseAdapter,尽管使用起来比其他适配器有些麻烦,但是使用它却能实现很多自己喜欢的列表布局,比如ListView.GridView.Gallery.Spinner ...

  4. android 中listview之BaseAdapter的使用

    Listview控件不像其他安卓控件那种直接拖拽到界面上就能用,而是采用类似J2EE中的MVC模型的方式使用,需要通过适配器将某种样式的数据或控件添加到其上而使用. MVC模型实现原理是 数据模型M( ...

  5. Android中ListView通过BaseAdapter实现数据的绑定

    1. public class ListFiles extends Activity { ListView Listview=null; protected void onCreate(Bundle ...

  6. Android关于listView的BaseAdapter以及getView的三级优化

    1.4个重写方法的含义 自定义Adapter继承自BaseAdapter(通用适配器)   getCount(); getItem(); getItemId(); getViewTypaCount() ...

  7. Android使用listView,BaseAdapter实现列表页

    参考: 1.讲解很详细: blog.csdn.net/psuaije/article/details/7447391 总结: 代码:

  8. 转--Android实现ListView过滤功能,继承于BaseAdapter,非ArrayAdapter。

    其实实现ListView过滤功能最方便的便是使用ArrayAdapter,里面自带的getFilter()方法能很方便的实现此功能,但是在实际的开发中,一般都是继承于BaseAdapter.还有一种是 ...

  9. Android 中万能的 BaseAdapter(Spinner,ListView,GridView) 的使用!

    大家好!今天给大家讲解一下BaseAdapter(基础适配器)的用法,适配器的作用主要是用来给诸如(Spinner,ListView,GridView)来填充数据的.而(Spinner,ListVie ...

随机推荐

  1. [转帖]SAP BASIS日常需要做的工作

    SAP BASIS日常需要做的工作 https://www.cnblogs.com/swordxia/p/4790684.html SAP Basis的一些日常工作包括用户权限管理.集团管理.数据库管 ...

  2. js 实现数据结构 -- 栈

    原文: 在 Javascript 中学习数据结构与算法. 概念: 栈是一种遵从先进后出 (LIFO) 原则的有序集合:新添加的或待删除的元素都保存在栈的末尾,称作栈顶,另一端为栈底.在栈里,新元素都靠 ...

  3. Python pip Unable--

    It is possible that pip does not get installed by default. One potential fix is: python -m ensurepip ...

  4. kubernetes 创建用户配置文件来访问集群API

    创建一个账号 kubectl create serviceaccount def-ns-admin 绑定集群权限 kubectl create rolebinding def-ns-admin --c ...

  5. 【并发编程】【JDK源码】J.U.C--AQS (AbstractQueuedSynchronizer)(1/2)

    J.U.C实现基础 AQS.非阻塞数据结构和原子变量类(java.util.concurrent.atomic包中的类),concurrent包中的基础类都是使用这种模式来实现的.而concurren ...

  6. luogu1117 优秀的拆分 (后缀数组)

    考虑分别计算每个位置作为AA的末尾或者BB的开头的个数 最后乘一乘就是答案 据说是套路的计算AA的方法: 首先枚举A的长度L,然后每L个字符当做一个关键点,这样的话,一个AA包含且只包含相邻两个关键点 ...

  7. 洛谷P2257 YY的GCD 莫比乌斯反演

    原题链接 差不多算自己推出来的第一道题QwQ 题目大意 \(T\)组询问,每次问你\(1\leqslant x\leqslant N\),\(1\leqslant y\leqslant M\)中有多少 ...

  8. User-Agent 请求消息头

    User-Agent User-Agent, 用户代理  请求消息头,其中包含了 客户机.客户端 的一些信息, 如 浏览器版本 和 类型,  操作系统的类型等. 具体解析 步骤, 推荐以下 博客文章 ...

  9. [报错]java.lang.ClassCastException

    Caused by: java.lang.ClassCastException: org.apache.xml.dtm.ref.DTMManagerDefault cannot be cast to ...

  10. 老男孩Python全栈学习 S9 日常作业 006

    1.使用循环打印以下效果: 1: * ** *** **** ***** 2: ***** **** *** ** * 3: * *** ***** ******* ********* for i i ...