ListView是用来显示一个列表的控件,它在Android源代码中是继承AbsListView类的,AbsListView类是继承于AdapterView类的,而AdapterView类是继承ViewGroup类的。

  下面程序的功能:创建ListView,点击Item会显示全部信息。

 1 package com.example.listviewdemo;
2
3 import android.support.v7.app.ActionBarActivity;
4 import android.os.Bundle;
5 import android.view.View;
6 import android.widget.AdapterView;
7 import android.widget.AdapterView.OnItemClickListener;
8 import android.widget.ArrayAdapter;
9 import android.widget.ListView;
10 import android.widget.Toast;
11
12 public class MainActivity extends ActionBarActivity implements OnItemClickListener {
13
14 private ListView lv;
15 private ArrayAdapter<ListCellData> adapter;
16
17 @Override
18 protected void onCreate(Bundle savedInstanceState) {
19 super.onCreate(savedInstanceState);
20 setContentView(R.layout.activity_main);
21
22 adapter = new ArrayAdapter<ListCellData>(this, android.R.layout.simple_expandable_list_item_1);
23 // adapter = new ArrayAdapter<String>(this, R.layout.lsit_cell);
24
25 lv = (ListView) findViewById(R.id.listView1);
26 lv.setAdapter(adapter);
27
28 adapter.add(new ListCellData("张三", "男", 45));
29 adapter.add(new ListCellData("李四", "男", 22));
30 adapter.add(new ListCellData("王五", "女", 33));
31
32 lv.setOnItemClickListener(this);
33
34 // adapter.add("Hello");
35 // adapter.add("What?");
36 }
37
38 @Override
39 public void onItemClick(AdapterView<?> parent, View view, int position,
40 long id) {
41 ListCellData data = adapter.getItem(position);
42
43 Toast.makeText(this, String.format("名字: %s, 性别: %s, 年龄: %d", data.getUserName(), data.getSex(), data.getAge()), Toast.LENGTH_SHORT).show();
44
45
46 }
47
48 }

MainActivity

  带image的ListView:

 1 package com.example.listviewdemo;
2
3 import android.app.Activity;
4 import android.os.Bundle;
5 import android.widget.ListView;
6
7 public class CustomListView extends Activity{
8
9 private ListView lv;
10
11 @Override
12 protected void onCreate(Bundle savedInstanceState) {
13 // TODO Auto-generated method stub
14 super.onCreate(savedInstanceState);
15 setContentView(R.layout.custom_listview);
16
17 lv = (ListView) findViewById(R.id.lv);
18 lv.setAdapter(new CustomListViewAdapter(this));
19 }
20
21 }

CustomListView

 1 package com.example.listviewdemo;
2
3 import android.content.Context;
4 import android.view.LayoutInflater;
5 import android.view.View;
6 import android.view.ViewGroup;
7 import android.widget.BaseAdapter;
8 import android.widget.ImageView;
9 import android.widget.LinearLayout;
10 import android.widget.TextView;
11
12 public class CustomListViewAdapter extends BaseAdapter {
13
14 private Context context = null;
15
16 CustomListViewAdapter(Context context){
17 this.context = context;
18 }
19
20 public Context getContext() {
21 return context;
22 }
23
24 private CustomListCellData[] data = new CustomListCellData[]{
25 new CustomListCellData("imag1", "dec 1", R.drawable.a),
26 new CustomListCellData("imag2", "dec 2", R.drawable.b),
27 new CustomListCellData("imag3", "dec 3", R.drawable.c)
28 };
29
30 @Override
31 public View getView(int position, View convertView, ViewGroup parent) {
32
33 // TextView tv = null;
34 //
35 // //这样做的好处:防止重复创建TextView
36 // //在有view被回收后,convertView就不是null
37 // if (convertView != null) {
38 // tv = (TextView) convertView;
39 // }else {
40 // tv = new TextView(CustomListView.this);
41 // }
42 //
43 // tv.setTextSize(30);
44 // tv.setText(getItem(position));
45 //
46 // return tv;
47
48 LinearLayout ll = null;
49 if (convertView != null) {
50 ll = (LinearLayout) convertView;
51 }else {
52 ll = (LinearLayout) LayoutInflater.from(getContext()).inflate(R.layout.custom_listv_cell, null);
53 }
54
55 CustomListCellData data = getItem(position);
56
57 ImageView icon = (ImageView) ll.findViewById(R.id.icon);
58 TextView name = (TextView) ll.findViewById(R.id.name);
59 TextView dec = (TextView) ll.findViewById(R.id.dec);
60
61 icon.setImageResource(data.iconId);
62 name.setText(data.name);
63 dec.setText(data.dec);
64
65 return ll;
66 }
67
68 @Override
69 public long getItemId(int position) {
70 return position;
71 }
72
73 @Override
74 public CustomListCellData getItem(int position) {
75 return data[position];
76 }
77
78 @Override
79 public int getCount() {
80 return data.length;
81 }
82
83 }

CustomListViewAdapter

 1 package com.example.listviewdemo;
2
3 public class CustomListCellData {
4
5 public CustomListCellData(String name, String dec, int iconId) {
6 this.name = name;
7 this.dec = dec;
8 this.iconId = iconId;
9 }
10
11 public String name = "";
12 public String dec = "";
13 public int iconId = 0;
14 }

CustomListCellData

 1 <?xml version="1.0" encoding="utf-8"?>
2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
3 android:layout_width="match_parent"
4 android:layout_height="match_parent"
5 android:orientation="horizontal" >
6
7 <ImageView
8 android:layout_width="100dp"
9 android:layout_height="100dp"
10 android:id="@+id/icon"/>
11
12 <LinearLayout
13 android:layout_weight="1"
14 android:layout_width="wrap_content"
15 android:layout_height="wrap_content"
16 android:orientation="vertical">
17
18 <TextView
19 android:id="@+id/name"
20 android:layout_width="wrap_content"
21 android:layout_height="wrap_content"
22 android:text="Large Text"
23 android:textAppearance="?android:attr/textAppearanceLarge" />
24
25 <TextView
26 android:id="@+id/dec"
27 android:layout_width="wrap_content"
28 android:layout_height="wrap_content"
29 android:text="TextView" />
30
31 </LinearLayout>
32
33 </LinearLayout>

AndroidManifest.xml

07_ListView的更多相关文章

随机推荐

  1. python机器学习TensorFlow框架

    TensorFlow框架 关注公众号"轻松学编程"了解更多. 一.简介 ​ TensorFlow是谷歌基于DistBelief进行研发的第二代人工智能学习系统,其命名来源于本身的运 ...

  2. 深入研究Paxos算法原理

    一.Paxos算法产生的背景 Paxos算法是基于消息传递且具有高度容错特性的一致性算法,是目前公认的解决分布式一致性问题最有效的算法之一,其解决的问题就是在分布式系统中如何就某个值(决议)达成一致. ...

  3. 使用Haproxy代理rabbitmq集群,用keepalive保证haproxy高可用

    原文地址:https://www.jianshu.com/p/440b8e1d5339 使用Haproxy代理rabbitmq集群 上一篇文章教了rabbitmq集群搭建.但是这样搭建出来的集群是3个 ...

  4. 配置交换机基于接口划分VLAN(接入层设备作为网关)

    组网图形 简介 划分VLAN的方式有:基于接口.基于MAC地址.基于IP子网.基于协议.基于策略(MAC地址.IP地址.接口).其中基于接口划分VLAN,是最简单,最常见的划分方式. 基于接口划分VL ...

  5. SLAM笔记

    1.matrix.preTranslate()和matrix.postTranslate()的区别 matrix.preTranslate(matrix_1); matrix.postTranslat ...

  6. Docker + Jenkins + Gitlab + Pytest + Allure 接口自动化测试之持续集成实战终极教程

    实战教程篇 前言 这边就不教大家怎么用 pytest 写项目了哦,下面有系列文章能帮助你快速入门 Pytest + Allure 这一篇教程主要是教如何从 0 到 1 搭建自动化测试的持续集成环境 后 ...

  7. Elasticsearch 第七篇:父子结构mapping设计以及相关查询

    h2.post_title { background-color: rgba(43, 102, 149, 1); color: rgba(255, 255, 255, 1); font-size: 1 ...

  8. python中 try、except、finally 的执行顺序(转)

    def test1(): try: print('to do stuff') raise Exception('hehe') print('to return in try') return 'try ...

  9. pytorch框架对RTX 2080Ti RTX 3090的支持与性能测试

    时间点:202011-18 一.背景 2020年9月nvidia发布了30系列的显卡.比起20系列网上的评价是:性能翻倍,价格减半. 最近正好本人手上有RTX 2080Ti 和 RTX 3090,所以 ...

  10. 测试_QTP使用实例

    1. QTP简介 1.1QTP功能与特点 QTP是QuickTest Professional的简称,是一种自动化软件测试工具.在软件的测试过程中,QTP主要来用来通过已有的测试脚本执行重复的手动测试 ...