Activity传递数据的经典例子

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");




  • 10
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

峥嵘life

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值