1、这里讨论的主要是当手机界面Rotation(按ctrl+F12,手机模拟器翻转)时,如何处理数据恢复
2、这里还讨论了,如何处理手机里面的联系人
1. [代码]main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:Android="http://schemas.android.com/apk/res/android"
Android:orientation="vertical" android:layout_width="fill_parent"
Android:layout_height="fill_parent">
<Button Android:id="@+id/pick" android:layout_width="fill_parent"
Android:layout_height="fill_parent" android:layout_weight="1"
Android:text="Pick" android:enabled="true" />
<Button Android:id="@+id/view" android:layout_width="fill_parent"
Android:layout_height="fill_parent" android:layout_weight="1"
Android:text="View" android:enabled="false" />
</LinearLayout>
2. [代码]RotationOneActivity.java
package yyl.rotation;
import Android.app.Activity;
import Android.content.Intent;
import Android.net.Uri;
import Android.os.Bundle;
import Android.view.View;
import Android.widget.Button;
public class RotationOneActivity extends Activity {
//变量定义
static final int PICK_REQUEST = 1337;//请求码
Button viewButton = null;//按钮
Uri contact = null;//Uri
//当手机界面Rotation(翻转)时,此方法重新加载www.linuxidc.com
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
//根据Id得到控件对象
Button btn = (Button) findViewById(R.id.pick);
//给按钮绑定单击事件监听器
btn.setOnClickListener(new View.OnClickListener() {
public void onClick(View view) {
//生成一个Intent对象,这个Intent传入两个参数
//这两个参数组合的作用是,单击才按钮,显示所有联系人,单击某一联系人,再返回到本Activity,传入选中的联系人的信息
Intent i = new Intent(Intent.ACTION_PICK, Uri
.parse("content://contacts/people"));
//启动,这里带来一个请求码
startActivityForResult(i, PICK_REQUEST);
System.out.println("pickButton onclick");
}
});
//根据Id得到控件对象
viewButton = (Button) findViewById(R.id.view);
//给按钮绑定单击事件监听器
viewButton.setOnClickListener(new View.OnClickListener() {
public void onClick(View view) {
//启动新的Activity
//传入两个参数,这两个参数组合的作用是,显示contact中的联系人
startActivity(new Intent(Intent.ACTION_VIEW, contact));
System.out.println("viewButton onclick");
}
});
System.out.println("--> onCreate");
//判断是否需要做Activity恢复
restoreMe(savedInstanceState);
//设定按钮是否可用
viewButton.setEnabled(contact != null);
}
//从其他相关Activity返回到本Activity是,调用该方法
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
System.out.println("onActivityResult-->" + requestCode);
//判断请求码
if (requestCode == PICK_REQUEST) {
//判断结果码
if (resultCode == RESULT_OK) {
//调用Intent data的getData()方法,得到选中的联系人信息
contact = data.getData();
//设定按钮可用性
viewButton.setEnabled(true);
}
}
}
//当离开本Activity时,调用该方法,该方法的作用可以做一个数据保存
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
System.out.println("onSaveInstanceState");
if (contact != null) {
outState.putString("contact", contact.toString());
System.out.println("onSaveInstanceState-->" + contact.toString());
}
}
//恢复Activity:如果没有该方法,当界面Rotation(翻转)时,原本可用的按钮,变成不可以用,因为数据丢失无法恢复
private void restoreMe(Bundle state) {
System.out.println("restoreMe");
contact = null;
if (state != null) {
String contactUri = state.getString("contact");
if (contactUri != null) {
contact = Uri.parse(contactUri);
}
}
}
}