Activity传递数据的经典例子
Android中通过Activity传递数据,是Activity的一个非常重要的一个应用,也是要我们熟练掌握的。
本文详细讲解Activity通过Intent传递数据的例子,来加深对Activity数据传递的认识,
其中也会设计到Activity的其他知识。本文的这个例子只是用来展示它的数据传递的功能,很多细节没有去完善。
一.关于题目
(一)题目:
1.设计一个注册页面,如图所示:
(1)用户可以输入用户名、密码、确认密码和邮箱
(2)用户可以选择头像
(3)用户可以点击注册按钮,把选择的信息添加到注册成功页面
(4)用户可以选择退出按钮,直接退出程序
2.设计一个头像选择页面,如图所示:
(1)用户可以选择自己想要的头像
(2)选择头像后返回注册页面,并显示出来
3.设计一个注册成功后的页面
(1)显示用户选择的基本信息
(2)显示用户选择的头像
(3)设计退出按钮,退出程序界面。
(二)程序分析:
1.主页面考察是是页面布局的设计
2.头像选择考察的是页面风格的设置、数据的简单传递
3.数据的复杂传递
4.后面两个还考察了页面的跳转
5.其中页面数据的传递的关系是要重点理解的
1)主页面点击选择头像按钮,选择头像后,把数据返回给主页面
2)主页面填写注册信息,通过注册后把信息传递给注册后的页面。
3)在注册后页面接收传递过来的信息。
6.程序运行前必须在AndroidManifest.xml里面注册其他两个Activity页面
二.程序设计
程序有简入繁,先设计布局再设计java代码。
(一)布局文件的设计
1.主布局页面的设计
2.头像选择页面的设计
3.选择注册后页面的设计
(二)代码程序的设计
下面才是需要重点理解的知识。
1.主程序代码是设计
package com.example.register;
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 android.widget.EditText;
import android.widget.ImageView;
public class MainActivity extends Activity {
// 把头像的图片id存放到一个数组中
static int[] heads = { R.drawable.img01, R.drawable.img02,
R.drawable.img03, R.drawable.img04, R.drawable.img05,
R.drawable.img06, R.drawable.img07, R.drawable.img08,
R.drawable.img09 };
// 选择头像的按钮对象
Button bn = null;
// 头像图片显示的对象
ImageView ivImageView = null;
// 选择注册按钮的对象
Button regist = null;
// 填写基本信息的EditText对象
EditText name = null;
EditText password = null;
EditText email = null;
//选择的头像的序号
private int currentHead = 0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 选择头像的对象
bn = (Button) findViewById(R.id.main_bn);
// 设置点击事件
bn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// 跳转到头像选择页面
Intent intent = new Intent(MainActivity.this,
ImageActivity.class);
startActivityForResult(intent, 1); // 设置请求码为1
}
});
// imageView对象
ivImageView = (ImageView) findViewById(R.id.main_iv_showhead);
// 用户名对象
name = (EditText) findViewById(R.id.main_et_name);
// 密码对象
password = (EditText) findViewById(R.id.main_et_password);
// 邮箱对象
email = (EditText) findViewById(R.id.main_et_email);
// 注册按钮的对象
regist = (Button) findViewById(R.id.main_bn_register);
// 设置点击事件
regist.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// 跳转到注册成功页面
Intent intent = new Intent(MainActivity.this,
AfterRegisterActivity.class);
// 获取用户输入的账号、密码、邮箱
String username = name.getText().toString();
String userpass = password.getText().toString();
String useremail = email.getText().toString();
ivImageView.getId();
// 把获得的数据放到Intent对象中
intent.putExtra("name", username);
intent.putExtra("password", userpass);
intent.putExtra("email", useremail);
intent.putExtra("head", currentHead);
// 执行页面的跳转
startActivity(intent);
// 关闭页面
finish();
}
});
// 退出按钮的对象
Button bnExit = (Button) findViewById(R.id.main_bn_exit);
bnExit.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// 关闭页面
finish();
}
});
}
// 程序信息反馈后的回调方法
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == 1) {
// 通过返回码设置头像
for (int i = 0; i < heads.length; i++) {
if (resultCode == i) {
ivImageView.setImageResource(heads[i]);
currentHead = i;
break;
}
}
}
}
}
2.选择头像页面的代码设计
package com.example.register;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.ImageButton;
public class ImageActivity extends Activity implements OnClickListener {
ImageButton[] ib = new ImageButton[9];
// 获取本布局文件内的图片的id地址
int[] arr = { R.id.img01, R.id.img02, R.id.img03, R.id.img04, R.id.img05,
R.id.img06, R.id.img07, R.id.img08, R.id.img09 };
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_image);
// 示例话图片按钮对象
for (int i = 0; i < ib.length; i++) {
ib[i] = (ImageButton) findViewById(arr[i]);
// 给所有的按钮设置点击监听
ib[i].setOnClickListener(this);
}
}
@Override
public void onClick(View v) {
/**
* v.getId()和和布局文件内的id相关,和drawable无关
* */
for (int i = 0; i < MainActivity.heads.length; i++) {
if (v.getId() == arr[i]) {
// 把选中的头像的游标值返回
//这里直接把返回码和头像信息绑定在一起了,其实可以分开的
setResult(i);
finish();//关闭页面
}
}
}
}
3.注册后页面的代码设计
package com.example.register;
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 android.widget.ImageView;
import android.widget.TextView;
public class AfterRegisterActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// 显示登陆界面
setContentView(R.layout.activity2);
// 获取布局中的文本控件
TextView name = (TextView) findViewById(R.id.activity2_tv_name);
TextView password = (TextView) findViewById(R.id.activity2_tv_password);
TextView email = (TextView) findViewById(R.id.activity2_tv_email);
ImageView headView = (ImageView) findViewById(R.id.activity2_iv_head);
// 获取传递过来的数据
Intent intent = getIntent();
String username = intent.getStringExtra("name");
String userpass = intent.getStringExtra("password");
String useremail = intent.getStringExtra("email");
int headNum = intent.getIntExtra("head", 0);
// 对文本的内容进行写入
name.setText(username);
password.setText(userpass);
email.setText(useremail);
headView.setImageResource(MainActivity.heads[headNum]);
// 退出按钮对象
Button bn = (Button) findViewById(R.id.activity2_bn_exit);
// 监听事件
bn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// 关不页面
finish();
}
});
}
}
(三)AndroidManifest.xml的注册
//上面是程序编译就有的,下面的是需要添加的
//页面的显示主题,这里是以对话框的形式显示
以上就是页面的数据传递的简单应用,当然上面的设计中无论是页面布局的设计
还是代码设计都是可以用很多中方法来设计的,这里只是用了比较简单容易理解的一种。
重点是数据传递的理解:
一.页面跳转
(一)如果是需要数据的返回就就用:startActivityForResult(intent, 1); //第二个参数是请求码
(二)如果不需要数据的返回就就用:startActivity(intent);
二.页面跳转前要传递很多数据就用intent来传递
// 把获得的数据放到Intent对象中
intent.putExtra("name", username);
三.第二个页面如果需要数据给第一个页面
//返回码
setResult(i);
//同样也可以返回数据,加返回码
setResult(resultCode, data);
三.页面跳转后如果需要获取数据
// 获取传递过来的数据
Intent intent = getIntent();
String username = intent.getStringExtra("name");