Activity启动另一个Activity的方式

来源:互联网 发布:公司网络设计方案 编辑:程序博客网 时间:2024/06/09 20:08

一个应用程序经常有多个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";@Overridepublic void onCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.main);Button start=(Button)findViewById(R.id.start);start.setOnClickListener(new OnClickListener(){@Overridepublic 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";@Overridepublic void onCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.main);Button start=(Button)findViewById(R.id.start);start.setOnClickListener(new OnClickListener(){@Overridepublic 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{        @Overridepublic void onCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.main);Button start=(Button)findViewById(R.id.start);start.setOnClickListener(new OnClickListener(){@Overridepublic 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{        @Overridepublic void onCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.main);Button start=(Button)findViewById(R.id.start);start.setOnClickListener(new OnClickListener(){@Overridepublic void onClick(View v){Intent intent=new Intent(MainActivity.this,Sercond.class);//启动指定Activity并等待返回的结果,其中0x11是请求码,用于标识该请求startActivityForResult(intent,0x11);}});}//重写该方法,用来获取指定Activity返回的结果@Overridepublic 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{@Overridepublic void onCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);//获取启动该Activity之前的Activity的intentIntent intent=getIntent();intent.putExtra("result","我是被启动的Activity");//设置结果码,与之前Activity的请求码对应setResult(0x11,intent);//结束该Activityfinish();}}

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


0 0
原创粉丝点击