Android应用通常是由多个Activity组成,这些Activity用于显示不同的页面,它们之间是相互独立的,但是经常需要在不同的界面之间传递数据,例如第一个页面注册信息后,将信息显示到第二个页面上面。
案例内容:
创建第一个Activity,用于输入注册信息,将信息传递给第二个Activity。
创建第二个Activity,接收第一个Activity传递的信息,将信息显示在页面上面。
activity_main.xml
<RelativeLayout 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:background="@drawable/cz_bj"
tools:context=".MainActivity" >
<Button
android:id="@+id/btn_regist"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_marginBottom="40dp"
android:layout_marginLeft="20dp"
android:layout_marginRight="20dp"
android:background="@drawable/cz_shade_button"
android:onClick="register"
android:text="注册新用户"
android:textColor="#ffffff" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_above="@+id/btn_regist"
android:layout_marginBottom="20dp"
android:layout_marginLeft="20dp"
android:layout_marginRight="20dp"
android:orientation="vertical" >
<RelativeLayout
android:id="@+id/rl_user"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/cz_shade_ll" >
<EditText
android:id="@+id/edtTxt_number"
style="@style/edtTxtStyle"
android:layout_centerVertical="true"
android:layout_toRightOf="@+id/tv_number"
android:ems="10"
android:inputType="number" />
<TextView
android:id="@+id/tv_number"
style="@style/tvStyle"
android:layout_centerVertical="true"
android:text="手机号码:" />
</RelativeLayout>
<RelativeLayout
android:id="@+id/rl_nickName"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="5dp"
android:background="@drawable/cz_shade_ll" >
<EditText
android:id="@+id/edtTxt_nickName"
style="@style/edtTxtStyle"
android:layout_centerVertical="true"
android:layout_toRightOf="@+id/tv_number"
android:ems="10" />
<TextView
android:id="@+id/tv_number"
style="@style/tvStyle"
android:text="昵称 :"
android:textColor="#000000" />
</RelativeLayout>
</LinearLayout>
</RelativeLayout>
activity_main.xml用到的样式文件styles.xml
<resources xmlns:android="http://schemas.android.com/apk/res/android">
<style name="AppBaseTheme" parent="android:Theme.Light">
</style>
<style name="AppTheme" parent="AppBaseTheme">
</style>
<style name="tvStyle" parent="android:Widget.Holo.Light.TextView">
<item name="android:layout_marginBottom">20dp</item>
<item name="android:layout_marginLeft">5dp</item>
<item name="android:layout_marginRight">5dp</item>
<item name="android:layout_marginTop">20dp</item>
<item name="android:layout_width">wrap_content</item>
<item name="android:layout_height">wrap_content</item>
<item name="android:layout_centerVertical">true</item>
<item name="android:textSize">16dp</item>
</style>
<style name="edtTxtStyle" parent="android:Widget.Holo.Light.EditText">
<item name="android:background">@null</item>
<item name="android:layout_marginRight">5dp</item>
<item name="android:layout_width">match_parent</item>
<item name="android:layout_height">wrap_content</item>
</style>
</resources>
MainActivity.java
package com.example.asus.bisinesscard;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.text.TextUtils;
import android.view.View;
import android.widget.EditText;
import android.widget.Toast;
public class MainActivity extends Activity {
private EditText edtTxt_number;
private EditText edtTxt_nickName;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();//初始化本类私有数据
}
private void initView(){
edtTxt_number =(EditText)findViewById(R.id.edtTxt_number);
edtTxt_nickName =(EditText)findViewById(R.id.edtTxt_nickName);
}
//"注册新用户",触发register事件
public void register(View view){
//获取用户填写信息,并进行格式转化
/*我们经常见到的 trim() 经常和toString()合用,
作用是取出空格,因为有时候用户输入信息的时候,
可能会过多的填写空格,或者有些时候就使用空格做为数据了,
结果造成程序出错~为了使我们的数据紧凑并且不会出现空格错误
我们就需要使用到trim()函数了~
例子如下:
b=EditText02.getText().toString();
if(!"".equals(EditText02.getText().toString().trim())) //判断EditText02 是否为空
b="职业:"+b+'\n';
ps:Trim() 函数的功能是去掉首尾空格,
在编程中发现使用if(EditText02.getText().toString()!="")不能正确判断是否为空,
调试后发现是莫名空格的原因,使用trim()函数后解决。*/
String number =edtTxt_number.getText().toString().trim();
String nickName =edtTxt_nickName.getText().toString().trim();
if(TextUtils.isEmpty(number)||TextUtils.isEmpty(nickName)) {
/*
Toast是Android中用来显示显示信息的一种机制,和Dialog不一样的是,
Toast是没有焦点的,而且Toast显示的时间有限,
过一定的时间就会自动消失。而且Toast主要用于向用户显示提示消息
http://android.tgbus.com/Android/tutorial/201103/346236.shtml
*/
Toast.makeText(this, "选项不能为空",0).show();
return;
}
Intent intent=new Intent(this,SecondActivity.class);//显示意图
//意图如何传递数据,信封邮包
intent.putExtra("number",number);
intent.putExtra("nickName",nickName);
//启动Activity
startActivity(intent);
}
}
activity_second.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.example.asus.bisinesscard.SecondActivity">
<ImageView
android:id="@+id/iv_head"
android:layout_width="50dp"
android:layout_height="50dp"
android:layout_marginLeft="20dp"
android:layout_marginTop="30dp"
android:src="@drawable/cz_head"/>
<TextView
android:id="@+id/tv_nickname"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignTop="@+id/iv_head"
android:layout_marginLeft="20dp"
android:layout_toRightOf="@+id/iv_head"
android:text="昵称"
android:textSize="18dp"/>
<TextView
android:id="@+id/tv_numberShow"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBottom="@+id/iv_head"
android:layout_alignLeft="@+id/tv_nickname"
android:text="手机:"
android:textSize="18dp" />
<TextView
android:id="@+id/tv_hobby"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_below="@+id/iv_head"
android:layout_marginLeft="21dp"
android:layout_marginTop="16dp"
android:text="爱好 :约会"
android:textSize="20dp" />
<TextView
android:id="@+id/tv_gender"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/tv_hobby"
android:layout_below="@+id/tv_hobby"
android:layout_marginTop="16dp"
android:text="性别 :暂定"
android:textSize="20dp" />
<TextView
android:id="@+id/tv_introduction"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/tv_gender"
android:layout_below="@+id/tv_gender"
android:layout_marginBottom="30dp"
android:layout_marginTop="16dp"
android:text="自我介绍:"
android:textSize="20dp" />
</RelativeLayout>
SecondActivity.java
package com.example.asus.bisinesscard;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.widget.TextView;
public class SecondActivity extends Activity {
private TextView tv_number, tv_nickName;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_second);
initView();//初始化数据
Intent intent = getIntent();//通过getIntent()方法获得对方传过来的intent对象
//取出数据
String number = intent.getStringExtra("number");
String nickName = intent.getStringExtra("nickName");
//设置本界面显示内容
tv_number.setText("电话号码:" + number);
tv_nickName.setText("昵称:" + nickName + "(火星)");
}
private void initView() {
tv_number = (TextView) findViewById(R.id.tv_numberShow);
tv_nickName = (TextView) findViewById(R.id.tv_nickname);
}
}
Activity必须在清单文件中注册,注册节点为<activity>。
Activity之间的跳转和传输数据使用Intent。