一、概述

       ListView是一个列表显示控件,它的应用非常广泛,在很多应用程序中都可以看到它的身影,比如来电通,网易新闻等等,特别是QQ。因此非常有必要熟练掌握它。

 

二、要求

       能够利用ListView显示一些内容,如数据、文本,某一行被点击时有相应的提示;能够实现简单的ListView的动态插入和删除。

 

三、实现

      新建工程MyListView,修改/res/layout/main.xml文件,主要是去掉原来的TextView,添加两个Button和一个ListView,修改后的main.xml文件如下:

 

Android ListView item 布局 安卓listview_android

1 <?xml version="1.0" encoding="utf-8"?>
 2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 3     android:layout_width="fill_parent"
 4     android:layout_height="fill_parent"
 5     android:orientation="vertical" >
 6 
 7     <Button
 8         android:id="@+id/tbutton"
 9         android:layout_width="fill_parent"
10         android:layout_height="wrap_content"
11         android:text="添加一行"
12         android:textSize="15px"
13         />
14 
15     <Button
16         android:id="@+id/sbutton"
17         android:layout_width="fill_parent"
18         android:layout_height="wrap_content"
19         android:text="删除一行"
20         android:textSize="15px"
21         />
22 
23     <ListView
24         android:id="@+id/listview"
25         android:layout_width="fill_parent"
26         android:layout_height="wrap_content"
27 
28         >
29     </ListView>
30 
31 </LinearLayout>

Android ListView item 布局 安卓listview_android

在/src下创建一个名为MyAdapter.java的文件,在该文件内创建一个MyAdapter类,该类继承自BaseAdapter类,在类里编写带一个参数的构造函数和一个自定义的函数setNumList(int n),完整的MyAdapter.java的文件:

 

Android ListView item 布局 安卓listview_android

1 package com.nan.listview;
 2 
 3 import android.content.Context;
 4 import android.graphics.Color;
 5 import android.view.LayoutInflater;
 6 import android.view.View;
 7 import android.view.ViewGroup;
 8 import android.widget.BaseAdapter;
 9 import android.widget.TextView;
10 
11 public class MyAdapter extends BaseAdapter
12 {
13     private Context mContext;
14     private int num;
15 
16     MyAdapter(Context c)
17     {
18         //接受MyListViewActivity类的Context
19         mContext = c;
20     }
21 
22     public void setNumList(int n)
23     {
24         //设置要显示多少行
25         num = n;
26     }
27 
28     @Override
29     public int getCount()
30     {
31         // TODO Auto-generated method stub
32         //返回行数的多少
33         return num;
34     }
35 
36     @Override
37     public Object getItem(int arg0) {
38         // TODO Auto-generated method stub
39         return arg0;
40     }
41 
42     @Override
43     public long getItemId(int position) {
44         // TODO Auto-generated method stub
45         return position;
46     }
47 
48     @Override
49     public View getView(int position, View convertView, ViewGroup parent)
50     {
51         // TODO Auto-generated method stub
52         //利用布局文件test.xml实例化convertView
53         convertView = LayoutInflater.from(mContext).inflate(R.layout.test, null);
54         //取得test.xml文件中的一个TextView
55         TextView mTextView = (TextView)convertView.findViewById(R.id.titletextview);
56         //设置其文本颜色为红色
57         mTextView.setTextColor(Color.RED);
58         //设置其文本内容
59         mTextView.setText(mTextView.getText()+Integer.toString(position));
60 
61         return convertView;
62     }
63 }

Android ListView item 布局 安卓listview_android

其中test.xml是自己新建的,该文件是ListView中每一行要显示的内容的布局文件,在这里我只布局了2个TextView文本,当然还可以布局其他项Button,ImageButton,CheckBox等控件。完整的test.xml文件如下:

 

Android ListView item 布局 安卓listview_android

1 <?xml version="1.0" encoding="utf-8"?>
 2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 3     android:layout_width="fill_parent"
 4     android:layout_height="fill_parent"
 5     android:orientation="vertical" >
 6 
 7 
 8     <TextView
 9         android:id="@+id/titletextview"
10         android:layout_width="wrap_content"
11         android:layout_height="wrap_content"
12         android:text="标题"
13         />
14 
15     <TextView
16         android:id="@+id/datatextview"
17         android:layout_width="wrap_content"
18         android:layout_height="wrap_content"
19         android:text="内容"
20         />
21 
22 </LinearLayout>

Android ListView item 布局 安卓listview_android

最后就是MyListViewActivity.java文件了,在该文件中设置了2个按钮和mListView被点击的监听,比较易懂,完整的内容如下:

 

Android ListView item 布局 安卓listview_android

1 package com.nan.listview;
  2 
  3 import android.app.Activity;
  4 import android.os.Bundle;
  5 import android.view.View;
  6 import android.widget.AdapterView;
  7 import android.widget.Button;
  8 import android.widget.ListView;
  9 import android.widget.Toast;
 10 
 11 
 12 public class MyListViewActivity extends Activity
 13 {
 14     private ListView mListView = null;
 15     private Button mButton = null;
 16     private Button sButton = null;
 17     //用自己定义的类来定义一个对象
 18     private MyAdapter mMyAdapter;
 19 
 20     private int numLists;
 21 
 22     /** Called when the activity is first created. */
 23     @Override
 24     public void onCreate(Bundle savedInstanceState)
 25     {
 26         super.onCreate(savedInstanceState);
 27         setContentView(R.layout.main);
 28 
 29         mListView = (ListView)findViewById(R.id.listview);
 30         mButton   = (Button)findViewById(R.id.tbutton);
 31         sButton   = (Button)findViewById(R.id.sbutton);
 32         //实例化mMyAdapter对象
 33         mMyAdapter = new MyAdapter(MyListViewActivity.this);
 34         //初始化要显示的行数为5行
 35         numLists = 5;
 36         mMyAdapter.setNumList(numLists);
 37         //为mListView添加要显示的内容
 38         mListView.setAdapter(mMyAdapter);
 39 
 40         //设置mListView每一行的监听,当点击其中一行时会提示点击的是第几行
 41         mListView.setOnItemClickListener(new AdapterView.OnItemClickListener()
 42         {
 43 
 44             @Override
 45             public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
 46                     long arg3)
 47             {
 48                 // TODO Auto-generated method stub
 49                 //显示点击的是第几行
 50                 DisplayToast(Integer.toString(arg2));
 51             }
 52         });
 53 
 54         //设置添加行按钮的监听
 55         mButton.setOnClickListener(new View.OnClickListener()
 56         {
 57 
 58             @Override
 59             public void onClick(View v)
 60             {
 61                 // TODO Auto-generated method stub
 62 
 63                 //行数加1
 64                 numLists += 1;
 65                 mMyAdapter.setNumList(numLists);
 66                 //刷新mListView
 67                 mListView.setAdapter(mMyAdapter);
 68             }
 69         });
 70 
 71       //设置删除行按钮的监听
 72         sButton.setOnClickListener(new View.OnClickListener()
 73         {
 74 
 75             @Override
 76             public void onClick(View v)
 77             {
 78                 // TODO Auto-generated method stub
 79                 //行数减1
 80                 numLists -= 1;
 81                 if(numLists == 0)
 82                 {
 83                     numLists = 1;
 84                     DisplayToast("不能再删除!!!");
 85                 }
 86                 mMyAdapter.setNumList(numLists);
 87                 //刷新mListView
 88                 mListView.setAdapter(mMyAdapter);
 89             }
 90         });
 91 
 92     }
 93 
 94     //显示提示的函数
 95     private void DisplayToast(String s)
 96     {
 97         Toast toast = Toast.makeText(MyListViewActivity.this, s, Toast.LENGTH_SHORT);
 98         toast.show();
 99     }
100 
101 }

Android ListView item 布局 安卓listview_android

运行这个程序,如下图所示:

 

Android ListView item 布局 安卓listview_xml_09

点击一下“添加一行”按钮,可以看到多了一行,效果如下:

Android ListView item 布局 安卓listview_xml_10

再点击下“删除一行”按钮,如下:

Android ListView item 布局 安卓listview_android_11

接着,点击第1行(从第0行开始计算的),会看到提示,如下:

 

Android ListView item 布局 安卓listview_xml_12

OK,完成了。

      上面这些都是比较简单的操作,实际应用中需要用到数据库等操作,由于这是基础篇的内容,所以不打算在这里讲述,以后在高级篇、实例篇中再详细讲解。

 

 

 

如果一件事情你觉得难的完不成,你可以把它分为若干步,并不断寻找合适的方法。最后你发现你会是个超人。不要给自己找麻烦,但遇到麻烦绝不怕,更不要退缩。 电工查找电路不通点的最快方法是:分段诊断排除,快速定位。你有什么启示吗? 求知若饥,虚心若愚。 当你对一个事情掌控不足的时候,你需要做的就是“梳理”,并制定相应的规章制度,并使资源各司其职。