33_为应用添加多个Activity与参数传递
------------------------------------------
1.一个activity代表一个的窗口,那么一个应用中往往会有很多的窗口
因而就有可能有多个activity.
----------------------------------------
2.在一个Activity中可以使用系统提供的startActivity(Intent intent)方法打开新的Activity,在打开新的Activity前,你
可以决定是否为新的Activity传递参数:
第一种:打开新的Activity,不传递参数
public class MainActivity extends Activity {
@Override protected void onCreate(Bundle savedInstanceState) {
.......
Button button =(Button) this.findViewById(R.id.button);
button.setOnClickListener(new View.OnClickListener(){//点击该按钮会打开一个新的
Activity
public void onClick(View v) {
//新建一个显式意图,第一个参数为当前Activity类对象,第二个参数为你要打开的Activity类
startActivity(new Intent(MainActivity.this, NewActivity.class));
}});
}
}
---------------------------
3.第二种:打开新的Activity,并传递若干个参数给它:
public class MainActivity extends Activity {
@Override protected void onCreate(Bundle savedInstanceState) {
.......
button.setOnClickListener(new View.OnClickListener(){//点击该按钮会打开一个新的Activity
public void onClick(View v) {
Intent intent = new Intent(MainActivity.this, NewActivity.class)
Bundle bundle = new Bundle();//该类用作携带数据
bundle.putString("name", "传智播客");
bundle.putInt("age", 4);
intent.putExtras(bundle);//附带上额外的数据
startActivity(intent);
}}); }
}
在新的Activity中接收前面Activity传递过来的参数:
public class NewActivity extends Activity {
@Override protected void onCreate(Bundle savedInstanceState) {
........
Bundle bundle = this.getIntent().getExtras();
String name = bundle.getString("name");
int age = bundle.getInt("age");
}
}
----------------------
1.通过例子来说明
------------------------
项目内容:当在MainActivity中点击按钮后,打开新的Activity,在新的Activity中
显示:我是新Activity
-------------------------
2.注意新建一个activity的xml文件,命名的时候不要命名成:otherActivity.xml这样
不会在R文件中生成.
------------------------------------
3.通过这个方法就可以显示界面:
a.在android中如何打开activity组件,需要用到意图,Intent,是用来激活组件
还有一个作用是附带数据.
b.Intent intent=new Intent();
------------------------------------------------
4.activity之间传输数据:
a.在MulActivity.java中
Intent intent=new Intent();
//第一种方法: intent.setClass(this, OtherActivity.class);//设置要激活的组件
//第二种方法: intent.setClassName(this, "com.credream.mulActivity.OtherActivity");
//第三种方法:intent.setComponent(new ComponentName(this, OtherActivity.class));
//第二个是要激活的组件,从意图中得到组件进行激活
//第四种做法:intent=new Intent(this,OtherActivity.class);
intent.setClassName("com.credream.mulActivity", "com.credream.mulActivity.OtherActivity");//可以用于跨应用
来激活组件
//这几种方法,都是显式意图,因为都指定了类的路径等.
//跨应用激活的作用是:第一个参数填写tell应用中的包,比如:
//指定其他应用的包名就行了
//这个意图对象是可以用来给另一个activity进行参数的传递
// intent.putExtra("company", "创梦网络");
// intent.putExtra("age", 4);
// 传递参数的另一种方法
Bundle bundle=new Bundle();
bundle.putString("company", "CSDN");
bundle.putInt("age",10);
//适合参数的批量添加
intent.putExtras(bundle);
//意图对象中,底层源码,也是采用Bundle 来保存数据的
//if(extras==null){
// extras=new Bundle();
//}
//extras.putAll()
startActivity(intent);
------------------------------------------
b.接收OtherActivity.java
package com.credream.mulActivity;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.widget.TextView;
//activity是一个组件,而组件要配置在清单文件中
public class OtherActivity extends Activity
{
@Override
protected void onCreate(Bundle savedInstanceState)
{
setContentView(R.layout.other);//指定界面的id,也就是界面对应的xml文件
super.onCreate(savedInstanceState);
Intent intent=getIntent(); //得到的意图对象是用于激活它的意图对象
//String company=intent.getStringExtra("company");//就可以提取字符串的参数
//int age=intent.getIntExtra("age", 0);//不存在这个值的时候,就用默认的参数0
//另一种得到参数的方法
Bundle bundle=intent.getExtras();
String company=bundle.getString("company");
int age=bundle.getInt("age");
TextView textView= (TextView)this.findViewById(R.id.textView);
textView.setText("公司名字:"+company+",成立"+age+"年了...");
//运行项目,可以看到已经把参数传递过去了
}
}
---------------------------------
4.当关闭一个activity的时候,把数据传给创建它的前一个activity的方法
这个方法放到下面的代码中实现.
----------------------------------------
5.创建MulActivity项目
-----------------------
a./MulActivity/src/com/credream/mulActivity/MulActivity.java
package com.credream.mulActivity;
import android.app.Activity;
import android.content.ComponentName;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Toast;
public class MulActivity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
public void openActivity(View e){
Intent intent=new Intent();
//第一种方法: intent.setClass(this, OtherActivity.class);
//设置要激活的组件
//第二种方法: intent.setClassName(this,"com.credream.mulActivity.OtherActivity");
//第三种方法:intent.setComponent(new ComponentName(this, OtherActivity.class));
//第二个是要激活的组件,从意图中得到组件进行激活
//第四种做法:intent=new Intent(this,OtherActivity.class);
intent.setClassName("com.credream.mulActivity", "com.credream.mulActivity.OtherActivity");
//可以用于跨应用来激活组件
//这几种方法,都是显式意图,因为都指定了类的路径等.
//跨应用激活的作用是:第一个参数填写tell应用中的包,比如:
//指定其他应用的包名就行了
//这个意图对象是可以用来给另一个activity进行参数的传递
// intent.putExtra("company", "创梦网络");
// intent.putExtra("age", 4);
// 传递参数的另一种方法
Bundle bundle=new Bundle();
bundle.putString("company", "CSDN");
bundle.putInt("age",10);
//适合参数的批量添加
intent.putExtras(bundle);
//意图对象中,底层源码,也是采用Bundle 来保存数据的
//if(extras==null){
// extras=new Bundle();
//}
//extras.putAll()
//----------------------------
//startActivity(intent);
//----------------------------
//当需要接收打开的activity传回来的参数的时候
startActivityForResult(intent, 200);
//用这个可以获得新的activity返回的数据
//第二个参数是请求码:请求码的作用是:告诉MulActivity,在它的代码的什么地方发出的一个请求
//比如,在新的activity中给删除操作命名一个请求码=1,给添加操作一个请求吗=2,然后
//MulActivity就可以根据请求码,判断这个结果是来自于什么操作,删除还是添加.
//requestCode的作用是:请求码,作用是,告诉
}
/**
* 用来得到对方所返回的数据,系统在得到otherActivity返回的数据的时候
* 会调用onActivityResult方法,来把数据返回给程序员
* int requestCode, int resultCode, Intent data
* requestCode请求码,resultCode结果码,返回的数据:是一个意图对象
* requestCode,告知在什么地方发起的请求
* resultCode,告诉MulActivity,otherActivity在什么地方返回的数据
*
*/
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data)
{
String result=data.getStringExtra("result");
Toast.makeText(this, result, 1).show();
super.onActivityResult(requestCode, resultCode, data);
}
}
------------------------------------------------
b./MulActivity/src/com/credream/mulActivity/OtherActivity.java
package com.credream.mulActivity;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.TextView;
//activity是一个组件,而组件要配置在清单文件中
public class OtherActivity extends Activity
{
@Override
protected void onCreate(Bundle savedInstanceState)
{
setContentView(R.layout.other);//指定界面的id,也就是界面对应的xml文件
super.onCreate(savedInstanceState);
Intent intent=getIntent(); //得到的意图对象是用于激活它的意图对象
//String company=intent.getStringExtra("company");//就可以提取字符串的参数
//int age=intent.getIntExtra("age", 0);//不存在这个值的时候,就用默认的参数0
//另一种得到参数的方法
Bundle bundle=intent.getExtras();
String company=bundle.getString("company");
int age=bundle.getInt("age");
TextView textView= (TextView)this.findViewById(R.id.textView);
textView.setText("公司名字:"+company+",成立"+age+"年了...");
//运行项目,可以看到已经把参数传递过去了
}
public void closeActivity(View v){
//在关闭之前要设置返回数据
Intent data=new Intent();
data.putExtra("result", "国荣和张晓晓在小树林..");
setResult(30,data);//返回的结果码和返回的数据
//resultCode结果码的作用是为了告诉创建这个activity的
//MulActivity,返回的结果数据是来自于这个activity的什么地方
finish();//关闭Activity(关闭窗口)
}
}
----------------------------------------------
c./MulActivity/res/layout/main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/hello" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/button"
android:onClick="openActivity"
/>
</LinearLayout>
--------------------
d./MulActivity/res/layout/other.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/content"
android:id="@+id/textView" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/closebutton"
android:onClick="closeActivity"
/>
</LinearLayout>
--------------------------------
e./MulActivity/res/values/strings.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="hello">Hello World, MulActivityActivity!</string>
<string name="app_name">MulActivity</string>
<string name="button">打开新的Activity</string>
<string name="title">新的Activity</string>
<string name="content">我是新的Activity</string>
<string name="closebutton">关闭Activity</string>
</resources>
------------------------------------