第二个Activity和Android ListView控件
上一个Activity中已经看到,start的是第二个Activity。写程序的都觉得程序理解起来比较容易,还是先奉上代码。
先看list_item.xml文件:
1 <?xml version="1.0" encoding="utf-8"?>
2
3 <TextView xmlns:android="http://schemas.android.com/apk/res/android"
4 android:layout_width="fill_parent"
5 android:layout_height="fill_parent"
6 android:padding="10dp"
7 android:textSize="16sp" >
8 </TextView>
xml文件很简单,就一个TextView,用来显示List中的每一个item。这个是在eclipse中GraphLayout中拖进去,自动生成。其中需要注意的是textSize这个可以修改,它决定了字体的大小。这里字体的单位是sp。
下面来看Java代码:
1 package Workshop.english.englishwords;
2
3 import android.app.Activity;
4 import android.os.Bundle;
5 import android.widget.*;
6 import android.view.*;
7 import android.app.ListActivity;
8 import android.content.Intent;
9 import android.widget.AdapterView;
10 import android.widget.AdapterView.OnItemClickListener;
11
12 /* This list activity list all unit1~12 */
13 public class UnitListAdapter extends ListActivity {
14
15
16 @Override
17 protected void onCreate(Bundle savedInstanceState)
18 {
19
20 super.onCreate(savedInstanceState);
21
22 setListAdapter(new ArrayAdapter<String>(this, R.layout.list_item, UNIT_NAME));
23 ListView lv = getListView();
24 lv.setTextFilterEnabled(true);
25
26 lv.setOnItemClickListener(new OnItemClickListener() {
27 public void onItemClick(AdapterView<?> parent, View view,
28 int position, long id) {
29
30 Intent intent = new Intent(UnitListAdapter.this, WordActivity.class);
31 startActivity(intent);
32 }
33 });
34 }
35
36 static final String[] UNIT_NAME = new String[] {
37 "unit1", "unit2", "unit3", "unit4", "unit5", "unit6"};
38 }
代码其实很简单。我一直崇尚简单。简单容易理解。特别对于初学者,简单的代码使人能抓住重点,不会迷失。
注意到这里用到的关键控件是ListView。ListView控件在我们看到的应用中使用十分广泛,我们最常见的app store中找需要的app时,看到的就是是ListView。
所以在这里继承的是ListActivity,而不是 直接继承于Activity。和ListView密切的一个东西就是listAdapter。
在这里,反映了MVC的模式。M是模式,其实是数据源,V是视图,是显示数据的,C是控制,是控制数据的,它是联系M和V的纽带。
在这里例子里,可以把我定义的静态的String数组看作是M,ListView看作是V,而listAdapter就是C。那么,可以这么说,adapter就是将String数组中的数据,也就是那些string显示到ListView中。line 22 的函数调用正反映了这个过程。
接下来的一个关键是定义每个item上的click,也就是,我希望和我们使用app store的经验一项,点一下一个item,便会在下一个屏幕中显示item的内容。
所以,这里给ListView给item设置了事件监听,line 26实现了这个设置。在listener中实现了onItemClick方法,目的是切换到另一个Activity----WordActivity。
这个程序,不得不说的是,它可能过于简单。一个方面,只有一个简单的ListView,第二个方面,ListView中的只有简单的几个数据,最后,在监听到事件之后,只是简单的切换到另一个Activity。
为什么这么简单,主要是因为我做的是原型,原型不需要那么复杂。简单的容易控制。在最后的程序中,这里的setListAdapter可以用其他更好的方法,另外还有两种Adapter。最重要的是,数据源肯定不会是这样的数组,关于数据存储,大量的数据可以存在数据库中,少量的数据可以以文件的形式存放。所以会有专门的类负责数据获取。
总的来说,原型是没有问题了,而且基本的元素也具备了,了解到了重要的控件ListView的各个方面。
最后,还是来分享下调试过程中积累的经验。
开始写程序的时候,基本上是找个例子模仿。