Android界面Rotation


1、这里讨论的主要是当手机界面Rotation(按ctrl+F12,手机模拟器翻转)时,如何处理数据恢复

2、这里还讨论了,如何处理手机里面的联系人

实例:

3、布局文件:

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>

4、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.bkjia.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);
            }
        }
    }
}

相关内容