Activity启动另一个Activity的方式

一个应用程序经常有多个Activity,它们经常需要互相调用,有的时候甚至需要从一个应用的Activity进入到另一个应用程序的Activity。下面是个人学习Activity后总结的从一个Activity启动另一个Activity的一些方式。

首先,Activity启动其他Activity有如下两个方法:

1,startActivity(Intent intent)

2,startActivityForResult(Intent intent, int requestCode):以指定的请求码requestCode启动Activity,而且程序将会等到新启动的Activity的结果

下面介绍通过startActivity(Intent intent)来启动另一个Activity的方式:

1,通过Intent intent= new Intent(MainActivity.this, SecondActivity.class);startActivity(intent);的方式

</pre>下面是通过点击按钮从MainActivity进入到SecondActivity<pre name="code" class="java">package com.wh.activitytoactivity;

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 MainActivity extends Activity{
	public final static String WH_ACTION="com.wh.activityresponse.WH_ACTION";
	@Override
	public void onCreate(Bundle savedInstanceState){
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		
		Button start=(Button)findViewById(R.id.start);
		start.setOnClickListener(new OnClickListener(){
			@Override
			public void onClick(View v){
				Intent intent=new Intent();
				intent.setAction(MainActivity.this,SecondActivity.class);
				startActivity(intent);
			}
		});
		
	}
}

2,通过Intent 指定action属性来启动另一个Activity,通过这种方式可以实现启动另一个应用程序的Activity

package com.wh.activitytoactivity;

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 MainActivity extends Activity{
	public final static String WH_ACTION="com.wh.activityresponse.WH_ACTION";
	@Override
	public void onCreate(Bundle savedInstanceState){
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		
		Button start=(Button)findViewById(R.id.start);
		start.setOnClickListener(new OnClickListener(){
			@Override
			public void onClick(View v){
				Intent intent=new Intent();
				//设置action属性
				intent.setAction(MainActivity.WH_ACTION);
				startActivity(intent);
			}
		});
		
	}
}

上面的程序指定启动Action属性名为: com.wh.activityresponse.WH_ACTION的Activity,这时需要在AndroidManifest.xml文件中进行配置:

<application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        
        <activity android:name=".MainActivity" 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=".Sercond" android:label="@string/app_name">
           <intent-filter>
               <!-- 在这里设置action属性,只要另一个Activity通过intent设置action属性值为该action属性值,就能启动这个Activity -->
                <action android:name="com.wh.activityresponse.WH_ACTION"/>
                <category android:name="android.intent.category.DEFAULT"/>
            </intent-filter> 
        </activity>
    </application>

3,通过设置Intent 的component属性来启动另一个Activity

package com.wh.activitytoactivity;

import android.app.Activity;
import android.content.ComponentName;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
/*
 * 从MainActivity启动另一个Activity的方式*/
public class MainActivity extends Activity{
        @Override
	public void onCreate(Bundle savedInstanceState){
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		
		Button start=(Button)findViewById(R.id.start);
		start.setOnClickListener(new OnClickListener(){
			@Override
			public void onClick(View v){
	                     //创建一个ComponentName对象
		             ComponentName comp=new ComponentName(MainActivity.this,Sercond.class);
			     Intent intent=new Intent();
			     //为Intent 设置compontent属性
			     intent.setComponent(comp);
			     startActivity(intent);
			}
		});
	}
}

另外,还可亿通过startActivityForResult(Intent intent, requestCode)方法来启动另一个Activity并且获得被启动Activity传递的数据

package com.wh.activitytoactivity;

import android.app.Activity;
import android.content.ComponentName;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Toast;
/*
 * 从MainActivity启动另一个Activity的方式*/
public class MainActivity extends Activity{
        @Override
	public void onCreate(Bundle savedInstanceState){
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		
		Button start=(Button)findViewById(R.id.start);
		start.setOnClickListener(new OnClickListener(){
			@Override
			public void onClick(View v){
				Intent intent=new Intent(MainActivity.this,Sercond.class);
				//启动指定Activity并等待返回的结果,其中0x11是请求码,用于标识该请求
				startActivityForResult(intent,0x11);
			}
		});
	}
	//重写该方法,用来获取指定Activity返回的结果
	@Override
	public void onActivityResult(int requestCode,int resultCode,Intent intent){
		//当requestCode,resultCode同时为0x11时,也就是处理特定的结果
		if(requestCode==0x11 && resultCode==0x11){
			//取出Intent里的Extras数据
			Bundle data=intent.getExtras();
			//取出Bundle 中的数据
			String result=data.getString("result");
			//显示返回结果的内容
			Toast.makeText(this, result, 5000).show();
		}
	}
}
Sercond.java

package com.wh.activitytoactivity;

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

public class Sercond extends Activity{
	@Override
	public void onCreate(Bundle savedInstanceState){
		super.onCreate(savedInstanceState);
		
		//获取启动该Activity之前的Activity的intent
		Intent intent=getIntent();
		intent.putExtra("result","我是被启动的Activity");
		//设置结果码,与之前Activity的请求码对应
		setResult(0x11,intent);
		//结束该Activity
		finish();
	}
}

以上各种方式我都省去了layout文件,并且都需要在AndroidManifest.xml文件中进行配置activity.


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值