Android中的页面跳转详解

Android页面跳转方式:

1、通过class跳转

Intent intent = new Intent();
//(当前Activity,目标Activity)
intent.setClass(MainActivity.this, TestActivity.class);
startActivity(intent);

2、通过Activity的name跳转,其实与1相同
try {
	Intent intent = new Intent();
	//(当前Activity,目标Activity)
	intent.setClass(MainActivity.this, Class.forName("com.cx.testdemo.TestActivity"));
	startActivity(intent);
} catch (ClassNotFoundException e) {
	// TODO Auto-generated catch block
	e.printStackTrace();
}
3、为Activity设置Action,通过Action跳转
Intent intent = new Intent();
//(声明中的Action)
intent.setAction("gesoft_cx");
//(声明中的Category)
intent.addCategory("android.intent.category.DEFAULT");
startActivity(intent);
上面的Action和Category应该与Activity声明中设置的Action和Category相同
<activity android:name="com.cx.testdemo.TestActivity">
	<!-- intent-filter:过滤器一 -->
      <intent-filter >
		<!-- action随便设置,但必须保证唯一 -->
            <action android:name="gesoft_cx"/>
            <category android:name="android.intent.category.DEFAULT"/>
      </intent-filter>
</activity>
4、跳转到其他应用界面
Intent intent = new Intent();
(目标应用的包名,目标应用的目标Activity)
intent.setClassName("com.imooc.mooo", "com.imooc.mooo.MainListActivity");
startActivity(intent);

目标Activity需要添加android:exported="true"属性

5、自定义权限

如果目标应用不希望其他应用跳转到 自身页面,可以增加自定义权限:
1)在Activity声明标签中增加permission(权限)属性,属性值随便设置,但必须唯一
<activity
     android:permission="gesoft.cx"
     android:name="com.imooc.mooo.MainListActivity"
     android:label="@string/app_name" >
     <intent-filter>
           <action android:name="android.intent.action.MAIN" />
           <category android:name="android.intent.category.LAUNCHER" />
     </intent-filter>
</activity>
2)增加自定义权限,属性name的值与上面permission属性值相同,属性protectionLevel(安全级别)根据需要(普通normal)设置
<!-- 自定义权限,防止其他应用访问 -->
<permission 
      android:name="gesoft.cx"
      android:protectionLevel="normal">
</permission>
这时在使用4中的方法进行跳转就会报错。
如果还要访问就必须在当前应用中添加一个与目标应用相对应的权限:
<uses-permission android:name="gesoft.cx" />

注意:测试时将权限name属性值设为"gesoft_cx"时,出现错误。

6、页面跳转与数据回传

A启动B,B页面中的数据可以回传给A
startActivityForResult(intent, requestCode);
//requestCode:请求的标识
//resultCode:第二个页面返回的标识
//data:第二个页面回传的数据
A页面通过onActivityResult(int requestCode, int resultCode, Intent data)方法接收回传过来的数据
B页面通过setResult(resultCode, data)方法回传数据给A页面

代码示例:

1、布局文件,两个Activity通用该布局文件。

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

    <Button
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        android:text="跳转页面" />

    <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_below="@+id/button1" />

</RelativeLayout>
2、第一个Activity代码
package com.cx.intenttest;

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 MainActivity extends Activity implements OnClickListener{
	private Button button;
	private TextView textView;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		
		button = (Button) findViewById(R.id.button1);
		textView = (TextView) findViewById(R.id.textView1);
		button.setOnClickListener(this);
	}

	@Override
	public void onClick(View v) {
		// TODO Auto-generated method stub
		Intent intent = new Intent(this, MyActivity.class);
		/**
		 * 第一个参数是Intent对象
		 * 第二个参数是请求的一个标识
		 */
		startActivityForResult(intent, 1);
	}
	
	/**
	 * 通过startActivityForResult跳转,接收放回数据的方法
	 * requestCode:请求的标识
	 * resultCode:第二个页面返回的标识
	 * data:第二个页面回传的数据
	 */
	@Override
	protected void onActivityResult(int requestCode, int resultCode, Intent data) {
		// TODO Auto-generated method stub
		if(requestCode == 1 && resultCode == 2){
			String content = data.getStringExtra("data");
			textView.setText(content);
		}
	}
}
3、第二个Activity页面代码
package com.cx.intenttest;

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 MyActivity extends Activity implements OnClickListener{
	private Button button;
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		
		button = (Button) findViewById(R.id.button1);
		button.setText("回传数据");
		button.setOnClickListener(this);
	}
	
	@Override
	public void onClick(View v) {
		// TODO Auto-generated method stub
		//回传到第一个页面的数据实际上是一个Intent对象
		Intent data = new Intent();
		data.putExtra("data", "回传数据");
		setResult(2, data);
		finish();
	}
}
不要忘记Activity的声明注册。。。

页面跳转与数据回传源码

已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页