单 词 | 说 明 | 单 词 | 说 明 |
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;
}
}