工程
MainActivity
Java代码
- package org.wp.activity;
-
-
/**
-
*
-
* 请求码的作用
-
* 使用startActivityForResult(Intent intent, int requestCode)方法打开新的Activity
-
* 我们需要为startActivityForResult()方法传入一个请求码(第二个参数)
-
* 请求码的值是根据业务需要由自已设定,用于标识请求来源
-
* 例如:一个Activity有两个按钮,点击这两个按钮都会打开同一个Activity
-
* 不管是那个按钮打开新Activity,当这个新Activity关闭后
-
* 系统都会调用前面Activity的onActivityResult(int requestCode, int resultCode, Intent data)方法
-
* 在onActivityResult()方法
-
* 如果需要知道新Activity是由那个按钮打开的,并且要做出相应的业务处理
-
* 这时可以这样做
-
* switch(requestCode){
-
* case 1:
-
* // 来自按钮1的请求,作相应业务处理
-
* case 2:
-
* // 来自按钮2的请求,作相应业务处理
-
* }
-
*
-
*
-
* 结果码的作用
-
* 在一个Activity中,可能会使用startActivityForResult()方法打开多个不同的Activity处理不同的业务
-
* 当这些新Activity关闭后
-
* 系统都会调用前面Activity的onActivityResult(int requestCode, int resultCode, Intent data)方法
-
* 为了知道返回的数据来自于哪个新Activity
-
* 在onActivityResult()方法中可以这样做(ResultActivity和NewActivity为要打开的新Activity):
-
* switch(resultCode){
-
* case 1:
-
* // ResultActivity的返回数据
-
* case 2:
-
* // NewActivity的返回数据
-
* }
-
*
-
*/
-
-
import android.app.Activity;
-
import android.content.ComponentName;
-
import android.content.Intent;
-
import android.os.Bundle;
-
import android.util.Log;
-
import android.view.View;
-
import android.widget.Button;
-
-
public class MainActivity extends Activity {
-
private static final String TAG = "MainActivity";
-
-
@Override
-
public void onCreate(Bundle savedInstanceState) {
-
super.onCreate(savedInstanceState);
-
setContentView(R.layout.main);
-
-
Button button = (Button) this.findViewById(R.id.button);
-
// 点击该按钮会打开一个新的Activity
-
button.setOnClickListener(new View.OnClickListener() {
-
-
@Override
-
public void onClick(View arg0) {
-
/*
-
* 打开新的Activity
-
* 在一个Activity中可以使用系统提供的
-
* startActivity(Intent intent)方法打开新的Activity
-
* 在打开新的Activity前
-
* 你可以决定是否为新的Activity传递参数
-
*/
-
-
/*
-
* 第一种写法
-
* 新建一个显式意图
-
* 第一个参数为当前Activity类对象
-
* 第二个参数为你要打开的Activity类
-
*
-
* 显示意图
-
* 通过调用setClass()或setComponent方法设置组件的意图为显示意图
-
*/
-
Intent intent = new Intent(MainActivity.this,
-
OtherActivity.class);
-
-
// 第二种写法
-
// Intent intent = new Intent();
-
// intent.setClass(MainActivity.this, OtherActivity.class);
-
-
// 第三种写法
-
// Intent intent = new Intent();
-
// intent.setComponent(new ComponentName(MainActivity.this,
-
// OtherActivity.class));
-
-
/**
-
* Intent提供了各种常用类型重载后的putExtra()方法
-
* 如:putExtra(String name, String value)
-
* putExtra(String name, long value)
-
* 在putExtra()方法内部会判断当前Intent对象内部是否已经存在一个Bundle对象
-
* 如果不存在就会新建Bundle对象
-
* 以后调用putExtra()方法传入的值都会存放于该Bundle对象
-
*/
-
-
// 打开新的Activity,并传递若干个参数给它
-
intent.putExtra("id", 10);
-
intent.putExtra("name", "张三");
-
-
/**
-
* Bundle类用作携带数据,它类似于Map,用于存放key-value名值对形式的值
-
* 相对于Map,它提供了各种常用类型的putXxx()/getXxx()方法
-
* 如:putString()/getString()和putInt()/getInt()
-
* putXxx()用于往Bundle对象放入数据
-
* getXxx()方法用于从Bundle对象里获取数据
-
* Bundle的内部实际上是使用了HashMap类型的变量来存放putXxx()方法放入的值
-
*
-
* 在调用Bundle对象的getXxx()方法时,方法内部会从该变量中获取数据
-
* 然后对数据进行类型转换,转换成什么类型由方法的Xxx决定
-
* getXxx()方法会把转换后的值返回
-
*/
-
-
// 该类用作携带数据
-
Bundle bundle = new Bundle();
-
bundle.putInt("id", 12);
-
bundle.putString("name", "张一");
-
// 为意图追加额外的数据,意图原来已经具有的数据不会丢失,但key同名的数据会被替换
-
intent.putExtras(bundle);// 附带上额外的数据
-
-
// MainActivity.this.startActivity(intent);
-
-
/**
-
* 如果你想在Activity中得到新打开Activity关闭后返回的数据
-
* 你需要使用系统提供的
-
* startActivityForResult(Intent intent, int requestCode)方法打开新的Activity
-
* 新的Activity关闭后会向前面的Activity传回数据
-
* 为了得到传回的数据 你必须在前面的Activity中重写
-
* onActivityResult(int requestCode, int resultCode, Intent data)方法
-
*/
-
// 为了获得返回结果
-
// 第二个参数为请求码,可以根据业务需求自己编号
-
MainActivity.this.startActivityForResult(intent, 2);
-
-
}
-
});
-
}
-
-
/**
-
* 当新Activity关闭后,新Activity返回的数据通过Intent进行传递
-
* Android平台会调用前面Activity
-
* 的onActivityResult()方法
-
* 把存放了返回数据的Intent作为第三个输入参数传入
-
* 在onActivityResult()方法中使用第三个输入参数可以取出新Activity返回的数据
-
*/
-
-
// 第一个参数为请求码,即调用startActivityForResult()传递过去的值
-
// 第二个参数为结果码,结果码用于标识返回数据来自哪个新Activity
-
@Override
-
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
-
Log.i(TAG, "requestCode=" + requestCode + ",resultCode=" + resultCode);
-
if (resultCode == 23) {
-
// 得到新Activity 关闭后返回的数据
-
Log.i(TAG, "result=" + data.getStringExtra("result"));
-
}
-
super.onActivityResult(requestCode, resultCode, data);
-
}
-
}
OtherActivity
Java代码
- package org.wp.activity;
-
-
import android.app.Activity;
-
import android.content.Intent;
-
import android.os.Bundle;
-
import android.view.View;
-
import android.widget.Button;
-
import android.widget.TextView;
-
-
public class OtherActivity extends Activity {
-
private TextView resultView;
-
private Button button;
-
-
@Override
-
protected void onCreate(Bundle savedInstanceState) {
-
super.onCreate(savedInstanceState);
-
// 这里可以使用setContentView(R.layout.otherui)显示某个视图.
-
setContentView(R.layout.otherui);
-
-
Intent intent = this.getIntent();
-
int id = intent.getIntExtra("id", 0);
-
String name = intent.getStringExtra("name");
-
resultView = (TextView) this.findViewById(R.id.result);
-
resultView.setText("id为" + id + ",姓名为" + name);
-
-
// 在新的Activity中接收前面Activity传递过来的参数:
-
// Bundle bundle = this.getIntent().getExtras();
-
// int idValue = bundle.getInt("id");
-
// String nameValue = bundle.getString("name");
-
-
button = (Button) this.findViewById(R.id.finish);
-
button.setOnClickListener(new View.OnClickListener() {
-
@Override
-
public void onClick(View arg0) {
-
// 数据是使用Intent返回
-
Intent intent = new Intent();
-
// 把返回数据存入Intent
-
intent.putExtra("result", "DeathNote");
-
/**
-
* 使用startActivityForResult(Intent intent, int requestCode)方法打开新的Activity
-
* 新Activity关闭前需要向前面的Activity返回数据
-
* 需要使用系统提供的setResult(int resultCode, Intent data)方法实现
-
*
-
* setResult()方法的第一个参数值可以根据业务需要自己定义
-
* RESULT_OK 是系统Activity类定义的一个常量,值为-1
-
* public static final int RESULT_CANCELED = 0;
-
* public static final int RESULT_OK = -1;
-
* public static final int RESULT_FIRST_USER = 1;
-
*
-
*/
-
// 设置返回数据
-
OtherActivity.this.setResult(23, intent);
-
// 关闭Activity
-
OtherActivity.this.finish();
-
}
-
});
-
}
-
}
main.xml
Xml代码
- <?xml version="1.0" encoding="utf-8"?>
-
<LinearLayout xmlns:android=""
-
android:orientation="vertical"
-
android:layout_width="fill_parent"
-
android:layout_height="fill_parent"
-
>
-
<Button
-
android:layout_width="wrap_content"
-
android:layout_height="wrap_content"
-
android:text="@string/button"
-
android:id="@+id/button"
-
/>
-
</LinearLayout>
otherui.xml
Xml代码
- <?xml version="1.0" encoding="utf-8"?>
-
<LinearLayout xmlns:android=""
-
android:orientation="vertical"
-
android:layout_width="fill_parent"
-
android:layout_height="wrap_content"
-
>
-
<TextView
-
android:layout_width="fill_parent"
-
android:layout_height="wrap_content"
-
android:text="@string/content"
-
/>
-
<TextView
-
android:layout_width="fill_parent"
-
android:layout_height="wrap_content"
-
android:id="@+id/result"
-
/>
-
<Button
-
android:layout_width="wrap_content"
-
android:layout_height="wrap_content"
-
android:text="@string/finish"
-
android:id="@+id/finish"
-
/>
-
</LinearLayout>
strings.xml
Xml代码
- <?xml version="1.0" encoding="utf-8"?>
-
<resources>
-
<string name="hello">Hello World, MainActivity!</string>
-
<string name="app_name">多个Activity</string>
-
<string name="content">这是新的Activity</string>
-
<string name="button">打开新的Activity</string>
-
<string name="finish">关闭Activity</string>
-
</resources>
AndroidManifest.xml
Xml代码
- <?xml version="1.0" encoding="utf-8"?>
-
<manifest xmlns:android=""
-
package="org.wp.activity" android:versionCode="1" android:versionName="1.0">
-
<application android:icon="@drawable/icon" android:label="@string/app_name">
-
<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>
-
<!--
-
android:name 属性值的前面加了一个点
-
表示OtherActivity是当前包org.wp.activity下的类
-
如果类在应用的当前包下,可以省略点符号
-
如果类在应用的子包下必须加点
-
如:OtherActivity类在org.wp.activity.user包下
-
可以这样写:<activity android:name=".user.OtherActivity" />
-
android:label为activity的页面标题
-
-->
-
<activity android:name=".OtherActivity" android:label="@string/content" />
-
</application>
-
<uses-sdk android:minSdkVersion="7" />
-
</manifest>
阅读(2411) | 评论(0) | 转发(0) |