Android页面跳转——Intent的使用

1、什么是Intent

    Intent可以理解为信使(意图)

    由Intent来协助完成Android各个组件之间的通讯,即Android四大组件之间的关联是通过Intent来实现。

2、Intent实现页面之间的跳转

    无回传的跳转:直接启动新页面

        startActivity(intent)

    有返回值的跳转:新页面可以回传信息给旧页面

        startActivityForResult(intent,requestCode);

        需要注意,这种方式需要关联另外两个方法:

        在新页面中,需要使用setResult(resultCode,data)方法,用于回传给旧页面信息

        在旧页面中,需要使用onActivityResult(int requestCode,int resultCode,intent data)方法,用于接收新页面回传的信息。

3、startActivity方法实现无返回值的页面跳转

    创建初始页面的FActivity.java文件:

package com.example.myintentdemo;

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;

public class FActivity extends Activity{
	private Button bt1;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		super.onCreate(savedInstanceState);
		setContentView(R.layout.factivity);
		
//		通过点击bt1实现页面之间的跳转:stratActivity方式,需要初始化Intent
		bt1=(Button) findViewById(R.id.button1_first);
		
//		注册点击事件
		bt1.setOnClickListener(new OnClickListener() {
			
			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
//				第一个参数,上下文对象,第二个参数,目标文件。在匿名内部类中,无法访问当前类中的对象,
//				需要表明FActivity.this,或者事先声明
//				初始化一个意图
				Intent intent =new Intent(FActivity.this, SActivity.class);
//				用Intent这个方法去实现这个意图
				startActivity(intent);
			}
		});
	}
}

创建其对应的factivity.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" >

    <Button
        android:id="@+id/button1_first"
        style="?android:attr/buttonStyleSmall"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="第一种启动方式" />

    <Button
        android:id="@+id/button2_second"
        style="?android:attr/buttonStyleSmall"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="第二种启动方式" />

    <TextView
        android:id="@+id/textView1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="吧第二个页面回传的数据显示出来" />

</LinearLayout>

创建待跳转的新页面的SActivity文件:

package com.example.myintentdemo;

import android.app.Activity;
import android.os.Bundle;

public class SActivity extends Activity{
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		super.onCreate(savedInstanceState);
		setContentView(R.layout.sactivity);
	}
}

创建其对应的sactivity.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" >

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

</LinearLayout>

在AndroidManifest.xml文件中对上述两个页面进行注册,并将Factivity.java设置为程序入口:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.myintentdemo"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="18" />

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name="com.example.myintentdemo.MainActivity"
            android:label="@string/app_name" >
        </activity>
        
         <activity
            android:name="com.example.myintentdemo.FActivity"
            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
            android:name="com.example.myintentdemo.SActivity"
            android:label="@string/app_name" >
        </activity>
    </application>

</manifest>

213006_yo3p_2725918.png

213021_BtHr_2725918.png

4、startActivityForResult实现有返回值的页面跳转

修改FActivity.java文件如下:

package com.example.myintentdemo;

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.TextView;

public class FActivity extends Activity{
	private Button bt1;
	private Button bt2;
	private TextView tv;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		super.onCreate(savedInstanceState);
		setContentView(R.layout.factivity);
		
		tv=(TextView) findViewById(R.id.textView1);
//		通过点击bt1实现页面之间的跳转:stratActivity方式,需要初始化Intent
		bt1=(Button) findViewById(R.id.button1_first);
		bt1=(Button) findViewById(R.id.button2_second);
//		注册点击事件
		bt1.setOnClickListener(new OnClickListener() {
			
			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
//				第一个参数,上下文对象,第二个参数,目标文件。在匿名内部类中,无法访问当前类中的对象,
//				需要表明FActivity.this,或者事先声明
				Intent intent =new Intent(FActivity.this, SActivity.class);
				startActivity(intent);
			}
		});
		bt2.setOnClickListener(new OnClickListener() {
//			通过startActivityForResult方法实现
			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub

				Intent intent =new Intent(FActivity.this, SActivity.class);
//				第一个参数是intent对象,第二个参数是请求的一个标志
				startActivityForResult(intent, 1);
			}
		});
	}
	
//	通过startActivityForResult跳转,接收返回数据的方法
//	requestCode请求的标志
//	resultCode第二个页面返回的标志
//	data第二个页面回传的数据
	@Override
	protected void onActivityResult(int requestCode, int resultCode, Intent data) {
		// TODO Auto-generated method stub
		super.onActivityResult(requestCode, resultCode, data);
		if(requestCode==1&&resultCode==2){
			String content=data.getStringExtra("data");
			tv.setText(content);
		}
	}
}

修改SActivity.java文件如下:

package com.example.myintentdemo;

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;

public class SActivity extends Activity{
	private Button bt;
	private String content="你好";
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		super.onCreate(savedInstanceState);
		setContentView(R.layout.sactivity);
//		第二个页面什么时候给第一个页面回传数据,被动式
//		回传到第一个页面实际上是一个Intent对象
		bt=(Button) findViewById(R.id.button1);
		bt.setOnClickListener(new OnClickListener() {
			
			@Override
			public void onClick(View V) {
				// TODO Auto-generated method stub
				Intent data=new Intent();
				data.putExtra("data",content);
				setResult(2,data);
//				结束当前页面,销毁,返回第一个页面
				finish();
			}
		});
	}
}

 

转载于:https://my.oschina.net/CoderBleak/blog/716772

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值