您的位置:首页 > 移动开发 > Android开发

【Android 开发教程】触发事件

2012-05-18 18:31 330 查看
本章节翻译自《Beginning-Android-4-Application-Development》,如有翻译不当的地方,敬请指出。
原书购买地址http://www.amazon.com/Beginning-Android-4-Application-Development/dp/1118199545/

目前看来,我们已经看到了,可以使用两种方法去适应屏幕方向的改变。现在,让我们看以下,当屏幕方向改变的时候,Activity状态的改变。
1. 创建一个工程:Orientations。
2. main.xml文件。
[html] view plaincopy<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<!-- 注意,这个EditText使用了android:id属性 -->
<EditText
android:id="@+id/txtField1"
android:layout_width="fill_parent"
android:layout_height="wrap_content" />
<!-- 注意,这个EditText没有使用android:id属性 -->
<EditText
android:layout_width="fill_parent"
android:layout_height="wrap_content" />

</LinearLayout>
3、OrentationsActivity.java。[java] view plaincopypublic class OrientationsActivity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Log.d("StateInfo", "onCreate");
}

@Override
public void onStart() {
Log.d("StateInfo", "onStart");
super.onStart();
}

@Override
public void onResume() {
Log.d("StateInfo", "onResume");
super.onResume();
}

@Override
public void onPause() {
Log.d("StateInfo", "onPause");
super.onPause();
}

@Override
public void onStop() {
Log.d("StateInfo", "onStop");
super.onStop();
}

@Override
public void onDestroy() {
Log.d("StateInfo", "onDestroy");
super.onDestroy();
}

@Override
public void onRestart() {
Log.d("StateInfo", "onRestart");
super.onRestart();
}

}
4. 调试。5. 在两个EditText中输入一些字符。就像这样。



6. 按Ctrl+F11,改变屏幕的方向。下图展示了横屏下的模拟器。注意,第一个EditText的内容仍然是存在的,但第二个EditText已经被清空了。(文章结尾会解释这是为什么)



7、观察LogCat窗口。
[html] view plaincopy12-15 12:27:20.747: D/StateInfo(557):onCreate
12-15 12:27:20.747: D/StateInfo(557):onStart
12-15 12:27:20.747: D/StateInfo(557):onResume
...
12-15 12:39:37.846: D/StateInfo(557):onPause
12-15 12:39:37.846: D/StateInfo(557):onStop
12-15 12:39:37.866: D/StateInfo(557):onDestroy
12-15 12:39:38.206: D/StateInfo(557):onCreate
12-15 12:39:38.216: D/StateInfo(557):onStart
12-15 12:39:38.257: D/StateInfo(557):onResume
从LogCat窗口可以看出,当屏幕方向改变的时候,Activity被销毁了。
[html] view plaincopy12-15 12:39:37.846: D/StateInfo(557):onPause
12-15 12:39:37.846: D/StateInfo(557):onStop
12-15 12:39:37.866: D/StateInfo(557):onDestroy
随之,它又被重新创建了。[html] view plaincopy12-15 12:39:38.206: D/StateInfo(557):onCreate
12-15 12:39:38.216: D/StateInfo(557):onStart
12-15 12:39:38.257: D/StateInfo(557):onResume
理解Activity的这种行为变化是很重要的,因为在屏幕方向改变之前,我们要执行一些必要的操作去保存当前activity的“状态”。例如,你的activity有一些变量,这些变量保存了一些需要被计算的值,这些值需要被保存。对任何activity而言,你都应该在onPause()方法中去保存“状态”,因为onPause()方法是在屏幕方向改变时,出现的第一个方法。接下来的几节教程,将会阐述保存“状态”的几种不同方法。

另一个需要特别注意的地方:当保存views的activity被销毁的时候,只有那些在activity中被声明的views(通过android:id属性)会保存它们自己的状态。例如,当用户在一个EditText中输入信息的时候,他可能改变屏幕的方向。这时,当activity被重新创建的时候,EditText中的信息就会自动地保存了,并重新显示在EditText中。相反,如果不使用android:id声明EditText,那么activity就不会保存EditText当前的任何内容。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐