• ·编程说·
  • ·文字·
  • ·技术·
  • About Me
Coding & Living & Enjoying
生活总是这样,现在措手不及的正是当初游刃有余的你
  1. Home
  2. 技术
  3. This article

Android - 重写BaseAdapter实现自定义ListView

2020年08月13日 5Browse 0Like 0Comments
Table of Content

要想实现自定义ListView,首先需要自定义一个listView的单元布局。下面是一个布局实例:

<?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">
    <ImageView 

        android:layout_width="wrap_content"
        android:layout_height="32dp"
        android:id="@+id/imageView"/>
      <TextView
        android:layout_width="120dp"
        android:layout_height="35dp"
        android:textSize="22sp" 
        android:text="2008-12-12"
        android:gravity="center" 
        android:paddingRight="5dp"
        android:id="@+id/dateView"
        />

      <LinearLayout 
          android:layout_width="wrap_content"
          android:layout_height="fill_parent"
          android:orientation="vertical">
          <LinearLayout 
          android:layout_width="wrap_content"
          android:layout_height="wrap_content"
          android:orientation="horizontal">
        <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="12sp" 
        android:text="类型:" />
          <TextView
        android:layout_width="40dp"
        android:layout_height="wrap_content"
        android:textSize="10sp" 
        android:id="@+id/typeView" />
          </LinearLayout>
          <LinearLayout 
          android:layout_width="wrap_content"
          android:layout_height="wrap_content"
          android:orientation="horizontal">
           <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="12sp" 
        android:text="金额:" />
          <TextView
        android:layout_width="40dp"
        android:layout_height="wrap_content"
        android:textSize="10sp" 
        android:id="@+id/moneyView" />
          </LinearLayout>
         </LinearLayout>
</LinearLayout>

利用该布局实现的效果如下:

我们需要通过一个自定义的Adapter(通常,这个Adapter继承自BaseAdapter)和 List<Map<K,V>>来设置ListView数据。

自定义的Adapter关键代码:

public View getView(int position, View convertView, ViewGroup parent) {

inflater = LayoutInflater.from(this.context);

convertView = inflater.inflate(R.layout.list_items, null);

ListView listView = null;

if (listView == null) {

              Log.v("position",Integer.toString(position));

listView = new ListView();

//控件实例化

listView.dateView = (TextView) convertView

.findViewById(R.id.dateView);

listView.typeView = (TextView) convertView

.findViewById(R.id.typeView);

listView.moneyView = (TextView) convertView

.findViewById(R.id.moneyView);

              //设置控件数据,数据源来自List<Map<K,V>>

listView.dateView.setText((String) dataList.get(position).get(

DBtest.DATA_NAME));

listView.typeView.setText((String) dataList.get(position).get(

DBtest.TYPE_NAME));

listView.moneyView.setText((String) dataList.get(position).get(

DBtest.MONEY_NAME));

Log.v("money",listView.moneyView.getText().toString());

} else {

listView = (ListView) convertView.getTag();

}

convertView.setTag(listView);

        //convertView用于在ListView中显示

return convertView;

}

数据源部分

Cursor cursor = cursor = DateBaseTestActivity.mDatabase.rawQuery(

"SELECT *FROM " + DBtest.TABLE_NAME, null);

Log.v("cursor", Integer.toString(cursor.getCount()));

cursor.moveToFirst();

do {

Map<String, Object> map = new HashMap<String, Object>();

int data_id = cursor.getColumnIndex(DBtest.DATA_NAME);

int type_id = cursor.getColumnIndex(DBtest.TYPE_NAME);

int money_id = cursor.getColumnIndex(DBtest.MONEY_NAME);

String dataString = cursor.getString(data_id);

String typeString = cursor.getString(type_id);

String moneyString = cursor.getString(money_id);

Log.v("isEMpry",moneyString );

map.put(DBtest.DATA_NAME, dataString);

map.put(DBtest.TYPE_NAME, typeString);

map.put(DBtest.MONEY_NAME, moneyString);

Log.v("map",(String)map.get(DBtest.MONEY_NAME));

list.add(map);

} while (cursor.moveToNext());

将数据库中的数据读取到List中。

public ListViewAdapter getAdapter(List<Map<String, Object>> dataList) {

Log.v("test", "ok");

ListViewAdapter mAdapter = new ListViewAdapter(this, dataList);

Log.v("test", Integer.toString(mAdapter.getCount()));

return mAdapter;

}

 方法getAdapter利用我们获得的这个list初始化一个ListViewAdapter(这是我自定义的adapter)。

 备注1:使用Cursor时,需要注意越界检查。 使用完后,请关闭。

 备注2:ListView的长度由List<Map<K,V>>的长度决定。
This work is licensed under a Creative Commons Attribution 4.0 International License
Tags: android
Last updated:2020年08月13日

Misko lee

男人,就要像贝多芬一样,扼住命运的喉咙 :)

Like
< Previous
Next >

Comments

Cancel reply

Misko lee

男人,就要像贝多芬一样,扼住命运的喉咙 :)

编程说

·编程说·

每周日晚11点更新,节假日不打烊

Archives
  • March 2021
  • August 2020
Newest Hotspots Random
Newest Hotspots Random
DSP 扫盲帖 此去经年 - 永兴未来城[2033年] 编程说【第二期】 - 聊聊系统集成与中间件开发 请别拿一两个胸部和游戏来说事!爷,不堕落! 也谈移动客户端的市场与发展趋势 Java编程中影响性能的一些特点
编程说 - 如何设计日志格式也谈移动客户端的市场与发展趋势一种通用递归深度检测技术 - 基于栈帧内容的检测 - Golang语言描述Kubernetes 简介TiDB Markdown Plugin - 将数据库运行在你的文章里从一个实际案例来讨论我们应该如何做性能优化
Web Audio API 的介绍与应用 十四小时极限调试挑战 - 流水账 [SeqNo] - 一款基于MySQL的分布式自增序列发号器。 也谈移动客户端的市场与发展趋势 此去经年 - 永兴未来城[2033年] 编程说【第二期】 - 聊聊系统集成与中间件开发
Tag aggregation
dsp android 编程说 html5 web audio parser markdown tidb wasm docker k8s kubernetes go
友链
  • Yian
  • 云风
  • 周梦康
  • 橡皮檫檫
  • 风雪之隅

COPYRIGHT © 2020 Misko Lee's Blog. ALL RIGHTS RESERVED.

THEME KRATOS MADE BY VTROIS