您的位置:首页 > 移动开发 > Android开发

android学习笔记---33_为应用添加多个Activity与参数传递

2013-04-04 20:38 671 查看
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>

------------------------------------
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: