Android学习笔记_ListView(列表视图)(一)

一、概念。

  ListView是以垂直列表的形式显示所有列表项。

二、使用

  假设数据库中有50个数据信息(persons,包括name、number、money),通过ListView显示出来。

  1、向数据库中50个person信息。具体添加方式可参考数据库章节介绍,采用数据库例子中的dao2的add方法结合for循环增加。

添加数据代码如下:

1 public void testAdd() throws Exception {
2         PersonDao2 dao = new PersonDao2(getContext());
3         long number = 885900000l;
4         Random random = new Random();
5         for(int i=0;i<50;i++){
6             dao.add("wangwu"+i, Long.toString(number+i),random.nextInt(5000));
7         }
8     }

  2、将数据库信息展现至界面。

  (1)采用ListView组件实现。ListView是典型的MVC设计模式。M:mode 数据类型,也就是List集合;V:view 视图,也就是ListView;C:controller 控制器,adapter 数据适配器。

    ①.在布局(Layout)文件中使用线性布局(LinearLayout),垂直方向。

    ②.增加ListView控件,设置id和宽高(填充窗体)

    ③.在主代码中创建并通过findViewById找到ListView控件;

    ④.采用ListView的setAdapt(adapter(ListAdapter接口))方法。由于参数adaper是接口类型的,所以需要创建接口的实现类。

    ⑤.创建一个类(MyAdapt)实现ListAdapter接口,并实现接口中为实现的方法。由于ListAdapter接口中为实现的方法比较多,因此新建的类(MyAdapter)只要去继承ListAdapter接口的简单实现类(BaseAdapter),由于BaseAdapter是抽象类,所以需要实现其中的抽象方法。(规律:如果一个接口的实现类非常多,一般就会存在BaseXXX、SimpleXXX、DefaultXXX等简单实现类,然后只要继承这些简单实现类即可)。

    ⑥.BaseAdapter抽象类里的抽象方法。getCount():控制ListView里面共有多少个条目,也就是从数据库返回的List集合的条目数量,即条目个数=集合的size;getView(int position, View convertView, ViewGroup parent),获取到一个view对象,用来展现数据集合某一个位置对应的数据,方法参数position表示当前数据在集合中的位置。

    ⑦.在getView(int position, View convertView, ViewGroup parent)方法中,new出一个TextView对象并通过getApplicationContext()方法放入上下文再设置样式,然后通过person的get(position)方法得到position位置对应的person对象,再通过position对象的toString()方法获得String对象并通过TextView对象的setText方法加至TextView对象中,最后该方法返回TextView对象。

通过ListVie组件展示代码如下:

主代码:

 1 public class MainActivity extends Activity {
 2     private ListView lv;
 3     private List<Person> persons;
 4
 5     @Override
 6     protected void onCreate(Bundle savedInstanceState) {
 7         super.onCreate(savedInstanceState);
 8         setContentView(R.layout.activity_main);
 9         LinearLayout ll_root = (LinearLayout) findViewById(R.id.ll_root);
10         PersonDao dao = new PersonDao(this);
11         persons = dao.findAll();
12
13         lv = (ListView) findViewById(R.id.lv);
14         lv.setAdapter(new MyAdapter());
15     }
16
17     public class MyAdapter extends BaseAdapter{
18         private static final String TAG = "MyaAdapter";
19
20         @Override
21         public int getCount() {
22             return persons.size();
23         }
24
25         @Override
26         public Object getItem(int position) {
27             // TODO Auto-generated method stub
28             return null;
29         }
30
31         @Override
32         public long getItemId(int position) {
33             // TODO Auto-generated method stub
34             return 0;
35         }
36
37         @Override
38         public View getView(int position, View convertView, ViewGroup parent) {
39             Log.i(TAG, "返回View对象,位置:"+position);
40             TextView tv = new TextView(getApplicationContext());
41             tv.setTextSize(20);
42             tv.setTextColor(color.black);
43             Person person =  persons.get(position);
44             tv.setText(person.toString());
45             return tv;
46         }
47     }
48 }

layout代码:

 1 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 2     xmlns:tools="http://schemas.android.com/tools"
 3     android:id="@+id/ll_root"
 4     android:layout_width="match_parent"
 5     android:layout_height="match_parent"
 6     android:orientation="vertical"
 7     tools:context=".MainActivity" >
 8
 9     <ListView
10         android:id="@+id/lv"
11         android:layout_height="match_parent"
12         android:layout_width="match_parent"></ListView>
13
14 </LinearLayout>

   

  (2)采用非ListView组件实现

    ①.界面定义为线性布局LinearLayout,定义id;

    ②.在主代码中通过findviewbyid找到该线性布局;

    ③.new出一个PersonDao对象,通过PersonDao对象里面的findAll()方法得到所有person对象的集合;

    ④.采用for循环遍历person集合;

    ⑤.在for中将每个person对象通过tostring()方法转成String字符串,并new出一个TextView()对象,设置TextView()对象的字体大小、颜色等相关数据,然后用TextView()对象的setText()方法将每个person信息加至对应的TextView()中。

    ⑥.由于LinearLayout是个View对象的容器,所以可以采用LinearLayout的addView(View chind)方法动态地将每个TextView()对象增加至LinearLayout中。

    ⑦.采用ScrollView对象包裹LinearLayout对象,实现多数据的上下滚动显示效果。

主程序代码如下:

 1 public class MainActivity extends Activity {
 2
 3     @Override
 4     protected void onCreate(Bundle savedInstanceState) {
 5         super.onCreate(savedInstanceState);
 6         setContentView(R.layout.activity_main);
 7         LinearLayout ll_root = (LinearLayout) findViewById(R.id.ll_root);
 8         PersonDao dao = new PersonDao(this);
 9         List<Person> persons = dao.findAll();
10         for(Person person : persons){
11             String info = person.toString();
12             TextView tv = new TextView(this);
13             tv.setTextSize(20);
14             tv.setTextColor(Color.BLACK);
15             tv.setText(info);
16             ll_root.addView(tv);
17         }
18     }
19 }

Layout代码如下:

 1 <ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
 2     xmlns:tools="http://schemas.android.com/tools"
 3     android:layout_width="match_parent"
 4     android:layout_height="match_parent" >
 5
 6     <LinearLayout
 7         android:id="@+id/ll_root"
 8         android:layout_width="match_parent"
 9         android:layout_height="match_parent"
10         android:orientation="vertical"
11         tools:context=".MainActivity" >
12     </LinearLayout>
13
14 </ScrollView>

时间: 2024-10-06 19:04:32

Android学习笔记_ListView(列表视图)(一)的相关文章

Android学习笔记(27):日历视图Calendar

日历视图CalendarView可用于显示和选择日期. 可以调用setOnDateChangedListener()方法绑定事件监听器. 常用XML属性和相关方法: XML属性 相关方法 说明 android:dateTextAppearance setDateTextAppearance(int) 设置该日历视图的日期文字的眼神 android:firstDayOfWeek setFirstDayOfWeek(int) 设置每周的第一天 android:focusedMonthDateColo

Android学习笔记-ImageView(图像视图)

原文来自:http://www.runoob.com/w3cnote/android-tutorial-imageview.html 本节引言: 本节介绍的UI基础控件是:ImageView(图像视图),见名知意,就是用来显示图像的一个View或者说控件! 官方API:ImageView;本节讲解的内容如下: ImageView的src属性和blackground的区别: adjustViewBounds设置图像缩放时是否按长宽比 scaleType设置缩放类型 最简单的绘制圆形的ImageVi

Android学习笔记二十四之ListView列表视图二

Android学习笔记二十四之ListView列表视图二 前面一篇我们介绍了常用的几种适配器的简单实现和ListView的简单使用,这一篇中,我们介绍一下ListView的优化和一些其它的问题. ListView优化方法一 在ListView中,我们最常用的就是自定义Adapter,在我们自定义Adapter中,需要实现两个比较重要的方法getCount()和getView(),前者是负责计算ListView的总Item数,后者是生成Item,有多少个Item就会调用getView()方法多少次

Android学习笔记二十七之ExpandableListView可折叠列表和StackView栈视图

Android学习笔记二十七之ExpandableListView可折叠列表和StackView栈视图 ExpandableListView可折叠列表 这一节我们介绍第三个用适配器的控件,ExpandableListView可折叠列表.这个控件可以实现我们在QQ中非常常见好友分组功能,ExpandableListView是ListView的子类,用法跟ListView差不多,下面我们来学习这个控件的基本使用: 常用属性: android:childDivider:指定各组内子类表项之间的分隔条,

android学习笔记——利用BaseAdapter生成40个列表项

RT: main.xml ? 1 2 3 4 5 6 7 8 9 10 11 12 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"               android:orientation="vertical"        

Android学习笔记二十九之SwipeRefreshLayout、RecyclerView和CardView

Android学习笔记二十九之SwipeRefreshLayout.RecyclerView和CardView 前面我们介绍了AlertDialog和几个常用的Dialog,ProgressDialog进度条提示框.DatePickerDialog日期选择对话框和TimePickerDialog时间选择对话框.这一节我们介绍几个新的API控件SwipeRefreshLayout.RecyclerView和CardView,这几个API控件都是google在Android5.0推出的.下面我们来学

Android学习笔记(一):基本概念

本文内容引用于<Android开发教程&笔记> Android的概念: Android是一个专门针对移动设备的软件及,它包括一个操作系统,中间件和一些重要的应用程序.Beta版的Android SDK提供了在Android平台上使用Java语言进行Android应用开发必须的工具和API接口. 特性 • 应用程序框架 支持组件的重用与替换• Dalvik 虚拟机 专为移动设备优化• 集成的浏览器 基于开源的 WebKit 引擎• 优化的图形库 包括定制的2D 图形库,3D 图形库基于

Pro Android学习笔记(十二):了解Intent(下)

解析Intent,寻找匹配Activity 如果给出component名字(包名.类名)是explicit intent,否则是implicit intent.对于explicit intent,关键就是component 名字,在<intent-fliter>中声明的其他属性被忽略.对于implicit intent,则根据action,category和data来进行匹配.然而一个intent fliter中可以声明多个actions,多个categories,多个data属性,因此可以满

Android学习笔记(四七):Content Provider初谈和Android联系人信息

Content Provider 在数据处理中,Android通常使用Content Provider的方式.Content Provider使用Uri实例作为句柄的数据封装的,很方便地访问地进行数据的增.删.改.查的操作.Android并不提供所有应用共享的数据存储,采用content Provider,提供简单便捷的接口来保持和获取数据,也可以实现跨应用的数据访问.简单地说,Android通过content Provider从数据的封装中获取信息. Content provider使用Uri