在Android中,活动是一个界面,当需要在界面之间相互切换的时候,需要用到Intent(意图)进行消息传递。使用startActivity(Intent)函数启动另一个活动。

Bundle是一个key-Value类,可以用他携带信息。

Bundle.putString("key","String")方法和Bundle.getString("key")方法放入与取出信息。

可以将信息放入到Intent中,使用方法Intent.putExtras(bundle)方法和Intent.getExtras();方法将信息放入和取出。


示例工程:两个.java,MainActivity,java中输入字符串,点击按键,启动NewActivity,java,并将字符串显示出来。

详细代码如下:

MainActivity.java:

importandroid.app.Activity;importandroid.app.ActionBar;importandroid.app.Fragment;importandroid.content.Intent;importandroid.os.Bundle;importandroid.view.LayoutInflater;importandroid.view.Menu;importandroid.view.MenuItem;importandroid.view.View;importandroid.view.View.OnClickListener;importandroid.view.ViewGroup;importandroid.widget.Button;importandroid.widget.EditText;importandroid.widget.TextView;importandroid.os.Build;publicclassMainActivityextendsActivity{EditTextedittext;TextViewtextview;@OverrideprotectedvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);Buttonbotton1=(Button)this.findViewById(R.id.btn1);edittext=(EditText)this.findViewById(R.id.edit);textview=(TextView)this.findViewById(R.id.mytext1);botton1.setOnClickListener(newOnClickListener(){@OverridepublicvoidonClick(Viewarg0){//TODOAuto-generatedmethodstubIntentintent=newIntent(MainActivity.this,NewActivity.class);Bundlebundle=newBundle();bundle.putString("name",edittext.getText().toString());intent.putExtras(bundle);startActivity(intent);}});}}

NewActivity.java:

importandroid.app.Activity;importandroid.content.Intent;importandroid.os.Bundle;importandroid.view.View;importandroid.view.View.OnClickListener;importandroid.widget.Button;importandroid.widget.TextView;publicclassNewActivityextendsActivity{TextViewtextview;protectedvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.activity_new);Buttonbotton1=(Button)this.findViewById(R.id.btn2);textview=(TextView)this.findViewById(R.id.mytext3);Intentintent=getIntent();Bundlebundle=intent.getExtras();textview.setText(bundle.getString("name"));botton1.setOnClickListener(newOnClickListener(){@OverridepublicvoidonClick(Viewarg0){//TODOAuto-generatedmethodstubstartActivity(newIntent(NewActivity.this,MainActivity.class));}});}}

activity_main:

<?xmlversion="1.0"encoding="utf-8"?><LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="fill_parent"android:layout_height="fill_parent"android:orientation="vertical"><TextViewandroid:id="@+id/mytext1"android:layout_width="fill_parent"android:layout_height="wrap_content"android:text="mainactivity"/><EditTextandroid:id="@+id/edit"android:layout_width="match_parent"android:layout_height="wrap_content"android:text=""/><Buttonandroid:id="@+id/btn1"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="tonew"/></LinearLayout>

activity_new:

<?xmlversion="1.0"encoding="utf-8"?><LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"><TextViewandroid:id="@+id/mytext2"android:layout_width="fill_parent"android:layout_height="wrap_content"android:text="newactivity"/><TextViewandroid:id="@+id/mytext3"android:layout_width="fill_parent"android:layout_height="wrap_content"android:text=""/><Buttonandroid:id="@+id/btn2"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="tomain"/></LinearLayout>

效果如下:


启动Activity并返回结果

有时候我们学院启动一个Activity并返回其结果,这是我们应该使用方法:

startActivityForResult(Intentintent,intrequestCode);

通过重写onActivityResult()对返回的参数进行处理,函数原型为:

protectedvoidonActivityResult(intrequestCode,intresultCode,Intentdata)//请求码与结果码

使用函数NewActivity.this.setResult(0,intent)和NewActivity.this.finish()设置返回参数


以上一个工程为基础,添加代码。使NewActivity.java中按键返回字符串,然后在MainActivity中把该字符串显示出来。

代码如下:

MainActivity

publicclassMainActivityextendsActivity{EditTextedittext;TextViewtextview;@OverrideprotectedvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);Buttonbotton1=(Button)this.findViewById(R.id.btn1);edittext=(EditText)this.findViewById(R.id.edit);textview=(TextView)this.findViewById(R.id.mytext1);botton1.setOnClickListener(newOnClickListener(){@OverridepublicvoidonClick(Viewarg0){//TODOAuto-generatedmethodstubIntentintent=newIntent(MainActivity.this,NewActivity.class);Bundlebundle=newBundle();bundle.putString("name",edittext.getText().toString());intent.putExtras(bundle);startActivityForResult(intent,0);}});}protectedvoidonActivityResult(intrequestCode,intresultCode,Intentdata){Bundlebundle=data.getExtras();textview.setText(bundle.getString("name"));}}

NewActivity:

publicclassNewActivityextendsActivity{privateTextViewtextview;protectedvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.activity_new);Buttonbotton1=(Button)this.findViewById(R.id.btn2);textview=(TextView)this.findViewById(R.id.mytext3);Intentintent=getIntent();Bundlebundle=intent.getExtras();textview.setText(bundle.getString("name"));botton1.setOnClickListener(newOnClickListener(){@OverridepublicvoidonClick(Viewarg0){//TODOAuto-generatedmethodstubIntentintent=newIntent();Bundlebundle=newBundle();bundle.putString("name","I'mfromNew");intent.putExtras(bundle);NewActivity.this.setResult(0,intent);NewActivity.this.finish();}});}}


效果如下:


请求码与结果码

请求码:当不同业务打开同一个Activity时,用请求码判断是那个业务发出的打开请求。

例如当一个MainActivity中两个button都打开Activity1时,可以设置不同的请求码,然后在Activity1中可根据不同请求码判断是button1还是button2打开的Activity1。


结果码:当同一个业务打开多个Activity时,用结果码判断是那个Activity返回的参数。

例如当MainActivity中button同时打开Activity1,Activity2,Activity3,可以在三个Activity中设置不同的结果码,然后在MainActivity中的方法onActivityResult中根据结果码判断次结果是那个Activity返回的。