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. mysql数据库——选择优化的数据类型

    选择更小的数据类型:一般情况下,应该尽量使用可以正确存储数据的最小数据类型.更小的数据类型通常更快,它们占用更少的磁盘.内存和CPU缓存,并且处理时需要的CPU周期也更少.但是要确保没有低估需要存储的 ...

  2. TCP的粘包和拆包问题及解决办法(C#)

    本文参考:https://blog.csdn.net/wxy941011/article/details/80428470 原因 如果客户端连续不断的向服务端发送数据包时,服务端接收的数据会出现两个数 ...

  3. 老大说新项目的结构和 xxx 项目一样就可以了,我 ……(使用 Maven Archetype 快速创建项目)

    前言 又要开发新项目了,还是创建新项目,怎么办?老大说按照 xxx 项目的结构创建一个新项目就可以了. 公众号:liuzhihangs,记录工作学习中的技术.开发及源码笔记:时不时分享一些生活中的见闻 ...

  4. react 实现组件嵌套以及子组件与父组件之间的通信

    当子组件触发onChange事件时,实际调用的是父组件中的handelSelect函数,通俗来说就是父组件通过属性handleSelect实现与子组件之间的通信. 父组件:SignupForm 子组件 ...

  5. python数据分析 Numpy基础 数组和矢量计算

    NumPy(Numerical Python的简称)是Python数值计算最重要的基础包.大多数提供科学计算的包都是用NumPy的数组作为构建基础. NumPy的部分功能如下: ndarray,一个具 ...

  6. 【故障公告】Memcached 的“惹祸”,不知在为谁背锅

    在 .NET 5.0 背锅 . Memcached 的惹祸 .缓存雪崩之后,我们没有找到问题的真正原因,我们知道没有找到根源的故障总是会再次光临的,不是在这周就是在下周,也许就在双11前后. 就在今天 ...

  7. Python练手项目实例汇总(附源码下载)

    今天给大家分享几个有趣的Python练手项目实例,希望对Python初学者有帮助哈~ 一.经典的俄罗斯方块   1. 绑定功能 1 # 绑定功能 2 class App(Frame): 3 def _ ...

  8. Assert类的静态方法

    五:常用断言 在NUnit中,断言是单元测试的核心.NUnit提供了一组丰富的断言,这些断言是Assert类的静态方法.如果一个断言失败,方法的调用不会返回值,并且会报告一个错误.如果一个测试包含多个 ...

  9. 数据采集与融合第四次作业:多线程以及scrapy框架的使用

    数据采集第四次作业:多线程以及scrapy框架的使用 任务一:单多线程的使用 单线程代码: from bs4 import BeautifulSoup from bs4 import UnicodeD ...

  10. JavaScript变量污染

    定义过多的全局变量,有可能造成全局变量冲突,这种现象称为变量污染. 全局变量在全局作用域内外都是可见的.若是已经声明了一个全局变量,再以相同的关键字和标识符重新声明全局变量,后者的赋值会替代前者的赋值 ...