AndroidManifest.xml
public class HelloWorld extends Activity { @Override //默认必须覆盖的方法 public void onCreate(Bundle savedInstanceState) { /*Bundle,一个类似于Map的类, 可以保存自己的状态, Activity 之间的参数传递, 也是通过一个Bundle 对象来实现的*/ super.onCreate(savedInstanceState); /*载入 layout文件夹下的 main.xml 文件, 该文件里面配置的元素在加载完毕后, 可通过 findViewById 获取元素 */ setContentView(R.layout.main); } }
public class Activity extends ApplicationContext{ protected void onCreate(Bundle savedInstanceState); protected void onStart(); protected void onRestart(); protected void onResume(); protected void onPause(); protected void onStop(); protected void onDestroy(); }
Activity的生命周期图(好久没画图了, visio2007挺好用的)
web 开发的时候, 有这样一种场景, 你必须选择一个人来进行操作, 操作的人很多, 我们把这些人放到一个弹出窗口中, 然后进行选择, 选择完毕以后, 我们关闭窗口, 返回结果, 把结果填充到原来的界面上.
上述的类似操作, 很多人在项目中应该都碰到过, 为此, 我曾经对公司的架构师提出增加此场景的处理方案, 可惜, 人家不理会我. 而Android 的设计者是很人性化的, 他们理解这样的场景需求, 并为我们提供了方便的处理方案!!!! 那就是
startActivityForResult(Intent intent, int requestCode);
该方法第一个参数不用多说了, 第二个参数是一个整形, 自己定义, 是对该次请求的一个标识, 目标Activity 又不是只有你一个可以请求, 是吧! 所以有个标识对目标Activity 来说, 也可以认出请求的对象是张三还是李四; 并且, 请求者对目标Activity 的请求可以不只一个, 某种请求是需要一个名字, 另一个请求是需要一个性别等.
当然, requestCode 是自己定义的, 我们很难确保它一定是唯一的, 这个就要看开发者自己的处理方式了.
protected void onActivityResult( int requestCode, int resultCode, Intent data)
startActivityForResult(intent,0); //0为自己定义的
/** * 该方法是对应startActivityForResult() 的回调方法, 处理目标Activity 返回的结果. * @param reqeustCode 对应上面的startActivityForResult() 方法里面的requestCode, * 例子的requestCode为0, 如果这里的 requestCode 也是0, 那就能对应上前面的请求了 * @param resultCode 这个是目标Activity 返回结果的一个标识, 这个标识是目标Activity 自定义的. * @param data Intent 大家都懂的, 数据在其内部的Bundle 对象中. */ @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); /*这段代码非必要的*/ //TODO 添加自己的处理代码 your code }
/* RESULT_OK 是 Activity的整形常量,这是对返回结果的一个标识, intent 要传递的数据都在里面, 它这里只扮演数据容器的作用, 没有跳转目的的作用, 跳转目的是靠Activity 活动栈来识别的 */ setResult(RESULT_OK, intent); /* 结束自己, 这样按返回键就不会再到达该Activity了 */ finish();