一个应用程序经常有多个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.