通俗一点说Activity就是一个界面,这个界面里面可以放置各种控件。我们可以将其和WPF对比起来看。WPF中的界面是用xaml来表示的,Activity的界面也是用xml文件表示的,放置在res->layout下面。xaml对应的后台文件是一个.cs文件,Activity对应的后台文件是在src->packet->xxx.java中。不同的是每生成一个新的Activity后,我们需要在AndroidManifest.xml中注册一下这个activity。当然你也可以看成是winform里面的界面,webform里面的网页。总之就是来展示给用户看的。
我们先来看一下创建一个新的的Activity的过程:
从上面的过程可以看出创建一个新的Activity还是比较麻烦的。三个方面的东西都要手动去创建,有时一不注意就会忘记注册activity这一步了。要是能像WPF或者silverlight那样自动生成就好了,出错率也降低了。不过羡慕归羡慕,我们还是继续在IDE中创建一个Activity吧。
1.首先在res->layout下面新建一个layout2.xml文件,在里面我们放了一个textview显示文字:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="wrap_content" android:layout_height="wrap_content"> <TextView android:id="@+id/txt" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="yes" /> </LinearLayout>
2.src下创建一个Activity2.java文件,这里的R.layout.layout2就是我们创建的layout2.xml文件:
public class Activity2 extends Activity { @Override public void onCreate(Bundle bundle) { super.onCreate(bundle); setContentView(R.layout.layout2); } }
3.注册Activity2.java这个文件,在AndroidManifest.xml的application标签下增加:
<activity android:name=".Activity2"/>
这里还要再提一下前面的这个点不要忘掉,因为正好和manifest标签里面的package值组成一个完整的路径名。
这里交互有两个意思:一是两个Activity之间的跳转,二是两个Activity的传值。
首先是不同Activity之间的跳转。在一个Activity类里面可以通过“ startActivity(intent) ”来完成跳转到另外一个Activity。我们重点要关注的就是里面的intent参数。Intent用于应用程序之间的交互和通讯,它不仅能够支持同一个程序里面的通讯还能和其他应用程序之间交互通讯。比如通过它可以直接启动浏览器到某个网页,启动打电话界面,启动发短信界面等等。我们这里讨论的只是用于同一程序内部的不同activity的跳转。intent使用起来也比较简单,看代码:
Intent intent = new Intent(); intent.setClass(ActivityMain.this, Activity2.class); startActivity(intent);
setclass方法里面的第一个参数当前类的实例,第二个参数是你要跳转到的Activity类。然后通过startActivity启动跳转(完整的代码在下面会放出,有兴趣的可以下载运行看看)。我们来看看跳转的效果图:
接着我们看看如何在不同的Activity传值。同样还是通过intent这个类。它里面有个putExtra方法,可以通过键值对的方式附加信息到intent上,然后另个activity就可以通过类似intent.getStringExtra(键名)来获取传过来的值了(不仅仅是string类型,其他类型大家可以自己试试)。上图中的123字符串就是通过这种方式由前面的activity传递过去的!当然我也是刚刚才接触这个不久,不知道android里面还有没有其他的方式,还需要再慢慢学习了。