android学习笔记3 Intent和Activity

android的Activity直接可以进行跳转和数据传递,就是通过Intent来实现的。

Intent作用有三种,第一种是启动一个新的Activity。第二种是启动一个新的Service。第三种是来广播一个事件。


1.主界面main.xml放两个按钮。

首先定义第二个按钮的监听器和监听事件:

//定义一个button2的监听器
		Button.OnClickListener button2_listener = new Button.OnClickListener() {
			public void onClick(View v){
				setTitle("这是在MainActivity");//触发这个监听器的时候,把这个activity的title设置一下
				Intent intent = new Intent();//
				intent.setClass(MainActivity.this, button2Activity.class);//启动button2Activity
				startActivity(intent);//启动
			}
		};
		
		Button bt2_button = (Button)findViewById(R.id.button2);//得到bt2_button对象
		bt2_button.setOnClickListener(button2_listener);//设置监听器

仅仅是启动一个新的Activity,新的Activity界面里又有一个button按钮,点击后可以再启动一个Activity。

public class button2Activity  extends ActionBarActivity{
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity2);
		
		
		
		
		Button.OnClickListener button3_listener = new Button.OnClickListener() {
			public void onClick(View v) {
			//	finish();//点击按钮,退出
				Intent intent = new Intent(button2Activity.this,button3Activity.class);//启动另一个Activity,xml文件和button3Activity.java就不具体写了
				startActivity(intent);
			}
		};
		
		Button button3_button = (Button)findViewById(R.id.button3);
		button3_button.setOnClickListener(button3_listener);
		setTitle("现在是在activity2里");
	}

}

2.关键是这个例子,通过Intent实现 Activity间的数据传递

定义button1的点击事件,并设置监听器:

Button.OnClickListener button1_listener = new Button.OnClickListener() {
			public void onClick(View v){
				Intent intent = new Intent();
				intent.setClass(MainActivity.this, button1Activity.class);
				intent.putExtra("activityMain", "数据来自activityMain");//putExtra()方法是将一组名值对添加到Intent的mExtras变量里边。他是一个Bundle类型,类似于HashMap。当新的Activity获取的时候,通过第一个参数字符串来获取第二个参数。(成对的映射)
				startActivityForResult(intent,REQUEST_CODE);//用这个函数启动Activity,当新的Activity结束时,还必须执行原Activity里的回调函数onActivityResult()。第二个参数是请求码,请求码大于0时,当新的Activity结束的时候,这个请求码被返回到onActivityResult()的参数里边。通过请求码不同在回调 函数里执行不同的操作。
				//startActivity(intent);//用这个函数启动Activity的话,不需要执行回调函数,也就是不需要返回结果。
			}
		};
		
		Button bt1_button = (Button)findViewById(R.id.button1);
		bt1_button.setOnClickListener(button1_listener);

新的Activity界面activity1.xml如下:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="18sp"
        android:text="TextView" />

    <Button
        android:id="@+id/button4"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Button4" />

</LinearLayout>

有一个Textview来显示从主Activity传过来的数据,还有一个按钮button4,点击后返回数据给主Activity

button1Activity.java如下:

public class button1Activity  extends ActionBarActivity{
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity1);
		
		Bundle extras = getIntent().getExtras();//getIntent()方法返回启动这个Activity的Intent,这里返回的就是MainActivity里定义的用来启动的intent。getExtras()方法返回这个Intent的Bundle类型的变量eExtras。这里存储了Intent携带的数据,就是从主Activity传来的数据。
		if(extras != null) {
			String data = extras.getString("activityMain");//名值对 //存储的数据是名值对存储的,通过“activityMain”映射获取对应的数据。
			
			
			TextView textview = (TextView)findViewById(R.id.textView1);
			textview.setText(data);
			setTitle("现在是在Activity1里::" +data);//显示在title
		}
		
		
		Button.OnClickListener     button4_listener= new Button.OnClickListener() {
			public void onClick(View v) {
				Bundle bundle = new Bundle();//用于在Intent中携带需要返回的数据,定义一下
				bundle.putString("store", "数据来自Activity1");//初始化一下,名值对形式存储,主Activity可通过“store”获取第二个参数。
				Intent intent = new Intent();//定义一个新的Intent
				intent.putExtras(bundle);//把存有名值对的bundle放在Intent中
				setResult(RESULT_OK,intent);//第一个参数是结果码,第二个参数是intent
				finish();//结束当前Activity,就把数据返回给主Activity了
				
			}
		};
		
	Button	button4_button = (Button)findViewById(R.id.button4);
	button4_button.setOnClickListener(button4_listener);
		
	}
	
}

主Activity还有个重要的回调函数处理返回结果


protected void onActivityResult(int requestCode,int resultCode,Intent data) {//处理从新Activiy返回的数据
		if(requestCode == REQUEST_CODE) {//requestCode(请求码)就是原始Intent当中的requestCode,此例是REQUEST_CODE
			if(resultCode == RESULT_CANCELED) {//resultCode(结果码)是新的Activity当中的操作是否合法,如果一切正常,那么返回0,如果出现了什么问题,就不会返回0。可以构造自己的值,来区分发生了什么。
				setTitle("取消");
			}
			else if(resultCode == RESULT_OK) {
				String temp = null;
				Bundle extras = data.getExtras();//Intent data就是新的Activity执行完毕返回的Intent,通过getExtras函数来获取返回的数据
				if(extras != null) {
					temp = extras.getString("store");//通过名值对映射来获取store映射的值。
				}
				setTitle(temp);//设置为Title
			}
			
		}
		
		
	}

最后不要忘记在 AndroidMainfest.xml文件中注册新的Activity




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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值