Android核心基础-8.Android四大组件之Activity-2.关闭、传递数据
来源:互联网 发布:黑九月 知乎 编辑:程序博客网 时间:2024/06/13 16:56
8.2.1 关闭Activity
系统提供了finish()来关闭Activity,我们按back键就调用了该方法关闭Activity。但是一般应用的主界面不会一按back键就关闭,所以我们要重写finish();
- 方法一:弹出确认对话框
- 方法二:弹出一个吐司
@Overridepublic void finish() { // 重写finish(), 在退出的时候弹出对话框 //方法一、// new AlertDialog.Builder(this).setTitle("确定要退出吗?").setPositiveButton("确定", new OnClickListener() {//// @Override// public void onClick(DialogInterface dialog, int which) {// MainActivity.super.finish(); // 如果点击确定按钮, 执行父类的finish(), 真正退出// }// }).setNegativeButton("取消", null).show(); //方法二、 if (System.currentTimeMillis() - previous < 1000) { super.finish(); } else { previous = System.currentTimeMillis(); Toast.makeText(getApplicationContext(), "再按一次退出", Toast.LENGTH_SHORT).show(); }}
注意:Builder是AlertDialog的内部类,所以不能直接super.finish();而要MainActivity.super.finish();才能将当前MainActivity关闭。
8.2.2 传递数据
8.2.2.1 启动时传递数据
- Intent可以使用putExtra()方法装入数据(键值对)
- 新Activity中getIntent()之后, 可以调用getStringExtra(), getIntExt()获取数据
- 可传递数据类型: 基本数据类型, String, Bundle, Serializable, Parcelable
//1.基本数组类型public void sendData(View v) { Intent intent = new Intent(this, OtherActivity.class); intent.putExtra("name", "张三"); // 向Intent中装入数据, String intent.putExtra("age", 21); // 基本数据类型及数组 startActivity(intent); // 启动Activity, Intent会把数据携带过去}//1.接收Intent intent = getIntent();String name = intent.getStringExtra("name");int age = intent.getIntExtra("age",20);//指定一个默认值//2.传递自定义对象// 可以序列化(把Object转为byte[])Person person = new Person("李四",22);intent.putExtra("p",person);//如果需要传输自定义对象,该类必须实现Serializable接口Public class Person implements Serializable{...}也可以传递集合,集合默认都实现了该接口,但其传递的对象都必须实现该接口:如ArrayList<Person>//2.接收Person p = (Person)intent.getSerializableExtra("p");//3.传递一个BundleBundle bundle = new Bundle();bundle.putString("name","王五");//传递一个Bundle(其就是一个Map集合)bundle.putInt("age",22);intent.putExtra("bundle",bundle);//3.接收Bundle bundle = intent.getBundleExtra("bundle");String name = bundle.getString("name");int age = bundle.getInt("age");//4.传递自定义对象Person person = new Person("李四",22);intent.putExtra("p",person);//person要实现Parcelable接口,其要实现的方法->@Overridepublic int describeContents() { return 0;}@Overridepublic void writeToParcel(Parcel parcel, int flags) { // 定义怎么把Person对象写入Parcel parcel.writeString(name); parcel.writeInt(age);}public static final Parcelable.Creator<Person> CREATOR = new Parcelable.Creator<Person>() { // 用来从Parcel中获取Person public Person createFromParcel(Parcel parcel) { // 定义怎么从Parcel中获取数据, 创建Person return new Person(parcel.readString(), parcel.readInt()); } public Person[] newArray(int size) { return new Person[size]; }};//具体写法,可以参考Android系统的android.graphics.Point(之所以推荐看这个,因为这个类就x,y两个字段)// Parcelable在绑定服务的时候有用//4.接收Person p = intent.getParcelableExtra("p");//实现Serializable接口时一般会给类定义一个版本号,当类要被反序列化时,返回到对应的版本号的类版本private static final long serialVersionUID = 1L;
进程之间可传递数据的:1.序列化;2.邮包
Activity有可能跨进程传递数据,可用:1.序列化Serializable;2.邮包Parcelable
绑定服务必须用邮包;Service只能用1.邮包Parcelable
8.2.2.2 关闭时返回数据
- 如果希望新的Activity可以返回数据, 那么就需要使用startActivityForResult()方法来启动Activity
- 在新的Activity中调用setReuslt()方法设置要返回的数据
- finish()之后, 原Activity会自动调用onActivityResult(), 该方法的形参就是setReuslt()设置的数据
发送数据到OtherActivity
public void getResult100(View v) { Intent intent = new Intent(this, OtherActivity.class); Person p = new Person("李四", 22); intent.putExtra("p", p); startActivityForResult(intent, 100); // 1.启动新的Activity, 并等待结果}public void getResult101(View v) { Intent intent = new Intent(this, OtherActivity.class); Person p = new Person("李四", 22); intent.putExtra("p", p); startActivityForResult(intent, 101); // 1.启动新的Activity, 并等待结果}@Overrideprotected void onActivityResult(int requestCode, int resultCode, Intent intent) { // 3.这个方法会在新Activity关闭后执行 String name = intent.getStringExtra("name"); int age = intent.getIntExtra("age", -1); TextView mainTV = (TextView) findViewById(R.id.mainTV); mainTV.setText(name + ": " + age); /* * requestCode: 代表从哪里启动的Activity * resultCode: 代表哪个Activity关闭之后返回的数据 */ Toast.makeText(getApplicationContext(), requestCode + ", " + resultCode, Toast.LENGTH_SHORT).show();}
OtherActivity调用finish关闭时返回数据给MainActivity
public class OtherActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_other); Intent intent = getIntent(); // 获取Intent Person p = intent.getParcelableExtra("p"); intent.putExtra("name", "赵六"); intent.putExtra("age", 24); setResult(200, intent); // 2.设置结果数据, 在finish()之后, 结果数据就会传递到onActivityResult()方法 } public void close(View v) { finish(); }}
示例源码->百度网盘
0 0
- Android核心基础-8.Android四大组件之Activity-2.关闭、传递数据
- Android 四大核心组件之Activity--Intent数据传递
- 【Android基础】(1)四大核心组件之Activity
- Android 四大核心组件之Activity详解
- Android 四大核心组件之Activity
- Android四大核心组件之Activity
- Android核心基础-8.Android四大组件之Activity-1.创建、启动
- Android基础之四大组件---Activity
- 4.Android基础:四大组件之----->Activity
- Android四大组件之Activity--基础
- Android基础—四大组件之Activity
- Android学习之路——Android四大组件之activity(二)数据的传递
- Android核心基础-8.Android四大组件之Activity-3.生命周期、横竖屏切换、启动模式、进程管理
- Android四大组件之Activity篇(一)(Activity的创建、开启和数据传递)
- Android 四大核心组件之Activity[生命周期篇]
- Android 四大核心组件之Activity[生命周期篇]
- 野人学Android基础篇之四大组件第一课--Activity的Intent传递
- Android核心基础-9.Android四大组件之BroadcastReceiver
- 面向对象三大特点:封装,继承,多态
- 黑马程序员——网络编程4:域名解析 & 网络结构
- hdu5362 Just A String DP
- 欢迎使用CSDN-markdown编辑器
- 【Linux】FrameBuffer操作入门
- Android核心基础-8.Android四大组件之Activity-2.关闭、传递数据
- Redis 5种数据类型,2种特殊数据处理策略
- light oj 1017 Brush (III)
- [经典书籍]编程经典书籍
- 字符串的排列和组合代码 C++
- [leetcode] Sudoku Solver
- 使用SpannableString设置部分文字大小、颜色、超链接、点击事件
- ubuntu中文手册安装
- POJ_3254_Corn Fields