前言

几种适配器里面相对来说比较简单的一种适配器,在使用时需要实现几个方法,并且也需要对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. C# Note38: Export data into Excel

    Microsoft.Office.Interop.Excel You have to have Excel installed. Add a reference to your project to ...

  2. Java基础:Java简介及安装配置(1)

    Java简介 Java是Sun公司于1995年推出的高级编程语言,具有跨平台特性,编译后的程序能够运行在多种类型的操作系统平台上. 1.1 Java应用程序版本 Java的3个独立用于开发不同类型应用 ...

  3. Sumdiv POJ 1845

    http://poj.org/problem?id=1845 题目 Time Limit: 1000MS   Memory Limit: 30000K Description Consider two ...

  4. http请求contentype详解

    请求头 在http请求头中有一项重要的参数就是contentype,用来告诉浏览器,我服务器传送过来的数据是什么格式,这样浏览器才知道怎么去解析服务器传过来的数据 urlencoded 通常我们for ...

  5. Linux查看文件以及磁盘空间大小管理(转)

    (1)查看文件大小  查看当前文件夹下所有文件大小(包括子文件夹)    du -sh   # du -h15M     ./package16K     ./.fontconfig4.0K    . ...

  6. 05VueCli

    详情请见: https://pizzali.github.io/2018/10/30/VueCli/ Vue CLI 是一个基于 Vue.js 进行快速开发的完整系统,Vue CLI 致力于将 Vue ...

  7. 用IntelliJ IDEA 开发Spring+SpringMVC+Mybatis框架 分步搭建四:配置springmvc

    在用IntelliJ IDEA 开发Spring+SpringMVC+Mybatis框架 分步搭建三:配置spring并测试的基础上 继续进行springmvc的配置 一:配置完善web.xml文件

  8. C++(2):错误:undefined reference to `__gxx_personality_v0'

    1. Linux Develop Notes     * 编译 c++ 程序需要添加 -lstdc++   sample: gcc -lstdc++ -o test test.c,否则会报 " ...

  9. node安装express-generator脚手架

    参考网址:https://www.jianshu.com/p/b555ba6f4067 全局安装: npm install express-generator -g 创建项目pro_test expr ...

  10. crm 添加用户 编辑用户 公户和私户的展示,公户和私户的转化

    1.添加用户 和编辑可以写在一起 urls.py url(r'^customer_add/', customer.customer_change, name='customer_add'), url( ...