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     }
View Code

  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 }
View Code

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>
View Code

   

  (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 }
View Code

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>
View Code

 

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。