首页 > 代码库 > Android学习笔记_ListView(列表视图)(一)
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 @Override21 public int getCount() {22 return persons.size();23 }24 25 @Override26 public Object getItem(int position) {27 // TODO Auto-generated method stub28 return null;29 }30 31 @Override32 public long getItemId(int position) {33 // TODO Auto-generated method stub34 return 0;35 }36 37 @Override38 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>
Android学习笔记_ListView(列表视图)(一)