第十三章之Activity与Intent&Intent传递序列化对象

单    词

说    明

单    词

说    明

Activity

屏幕组件

Intent 

意图


Activity简介

Activity是Android的四大组件之一,是应用程序加载布局的容器。

肉眼能看到的东西全是Activity。(美女)


步骤

①创建一个类继承Activity

public class OtherActivity extends Activity {}

A.实现onCreate方法===========>B.设置布局setContentView(R.layout.main);

②在AndroidManifest.xml文件中注册一个Actvity

<activity android:name=".OtherActivity" >

name代表对应的Activity实例

name要加包名com.ryan……    也可以直接用"."点加实例名代替

③创建一个意图

//请搬家公司

Intent intent = new Intent();

意图:运输大队长

④显示的设置一个启动的组件
第一个参数是一个上下文
第二个参数是被激活的Activity

//告诉搬家公司从哪里搬到哪里

intent. setClass(Context packageContext, Class<?> cls);

//装货

intent.putExtra(键值对);

⑤启动组件

//告诉搬家公司可以出发了

startActivity(intent);

//接搬家公司

Intent intent =getIntent();

//卸货

String guizi=intent.getStringExtra();

红色表示otherActivity

绿色是MainActivity


Notes

<intent-filter>
                <action android:name="android.intent.action.MAIN" />


                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>

这段代码的意思是:应用程序默认启动的第一个文件。


Serializable

类通过实现 java.io.Serializable 接口以启用其序列化功能。

将实体类保存到硬盘中,因为实体类在程序中是保存到内存中的。

步骤:

创建实体类 实现Serializable接口

写属性、生成get set方法(如上课案例中的Temp.java)

在Mainactivity中 new出对象,设置属性

就可以用intent.putExtra(键值对);来传递对象。

接受对象时要强转成Temp。

Tips:但是在安卓中使用java的序列化对象,效率会受影响。

所以下面是安卓实现序列化的步骤

创建Student实体类实现Parcelable(os包下的)

写属性、生成get set方法(如上课案例中的Student.java)

将属性封装成parcel对象[writeToParcel(Parcel dest,int flags)方法]

实现一个静态方法[Parcelable.Create<Student> CREATOR=……],

将Parcel对象转换成Parcelable对象  

Tips:source.readString()的读取数据顺序根据安装封装成Parcel时的顺序来的。

(writeToParcel(Parcel dest,int flags)方法)里面


Tips:newArray里面会引用createFromParcel方法获取单个Student


注意:

*1.该Creator对象必须为静态 的;

*2该定义的变量必须是大写

上课案例

AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.ryan.lsn3_12_3"
    android:versionCode="1"
    android:versionName="1.0" >


    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="14" />


    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name=".MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />


                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <!-- 配置Activity的实例 -->
        <activity android:name=".otherActivity"></activity>
    </application>


</manifest>

main.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/hello_world" />
	<Button 
	    android:text="跳转到另外的Activity"
	    android:id="@+id/btn1"
	    android:layout_height="wrap_content"
	    android:layout_width="fill_parent"/>
</LinearLayout>

other.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">


    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/hello_other" />


</LinearLayout>

MainActivity.java

package com.ryan.lsn3_12_3;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

import com.ryan.pojo.Student;
import com.ryan.pojo.Temp;

public class MainActivity extends Activity {
	Button btn1;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		btn1 = (Button)findViewById(R.id.btn1);
		btn1.setOnClickListener(new OnClickListener() {
			
			@Override
			public void onClick(View v) {
				//Serializable序列化对象
				Temp temp = new Temp();
				temp.setId("110");
				temp.setName("柜子");
				//Parcelable序列化对象
				Student student = new Student();
				student.setId("522");
				student.setName("张晓芳");
				
				//创建意图对象(运输大队长)
				Intent intent = new Intent();
				//设置从哪跳转到哪
				intent.setClass(MainActivity.this, otherActivity.class);
				//装数据
				intent.putExtra("guizi", "柜子");
				intent.putExtra("yizi", "椅子");
				intent.putExtra("kongtiao", "空调");
				intent.putExtra("shuzi", 520);
				//装Serializable序列化对象
				intent.putExtra("temp_guizi", temp);
				//装Parcelable序列化对象
				intent.putExtra("student", student);
				//启动一个Activity
				startActivity(intent);
			}
		});
	}
}


otherActivity.java

package com.ryan.lsn3_12_3;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;

import com.ryan.pojo.Student;
import com.ryan.pojo.Temp;

public class otherActivity extends Activity {

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.other);
		Intent intent = getIntent();
		String guizi = intent.getStringExtra("guizi");
		String yizi = intent.getStringExtra("yizi");
		
		//从意图中获取Serializable序列化对象
		Temp temp = (Temp) intent.getSerializableExtra("temp_guizi");
		
		//从意图中获取Parcelabel序列化对象
		Student stu = (Student)intent.getParcelableExtra("student");
		System.out.println(temp.getId()+"--"+temp.getName());
		System.out.println(stu.getId()+"--"+stu.getName());
	}
}

Student.java

package com.ryan.pojo;

import android.os.Parcel;
import android.os.Parcelable;

public class Student implements Parcelable {
	private String id;
	private String name;
	
	/**
	 * 该Creator的对象必须为静态的。(必须注意)
	 * 该定义的变量也必须为大写(必须注意)
	 */
	public static final Parcelable.Creator<Student> CREATOR = new Creator<Student>() {
		@Override
		public Student[] newArray(int size) {
			Student [] student = new Student[size];
			return student;
		}
		
		/**
		 * 将parcel对象转换成parcelable对象
		 * 参数1:source 
		 */
		@Override
		public Student createFromParcel(Parcel source) {
			Student s = new Student();
			/**
			 * source.readString()是根据writeToParcel这个里面写入的顺序
			 * 来获取相应的值得。
			 */
			//从parcel中读取第一个数据
			s.setId(source.readString());
			//从parcel中读取第二个数据
			s.setName(source.readString());
			// TODO Auto-generated method stub
			return s;
		}
	};
	@Override
	public int describeContents() {
		return 0;
	}
	
	/**
	 * 将属性封装parcel对象
	 * 参数1:dest 需要将属性封装到该对象当中
	 */
	@Override
	public void writeToParcel(Parcel dest, int flags) {
		dest.writeString(id);
		dest.writeString(name);
	}

	public String getId() {
		return id;
	}

	public void setId(String id) {
		this.id = id;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

}


Temp.java

package com.ryan.pojo;

import java.io.Serializable;

public class Temp implements Serializable{
	private String name;
	private String id;
	
	
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getId() {
		return id;
	}
	public void setId(String id) {
		this.id = id;
	}
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值