Android--Intent组件带参传递与返回
Android 是 单例模式:
表示 application 唯一的。每个应用被启动的时候,其实是 application 被创建。
Context 上下文:
context 是 Application 和 activity 的父类。很多方法中,传递的都是上下文,而不是具体的 Activity 或者 Application。
AndroidManifest.xml :
每一个 activity 都必须在 AndroidManifest.xml 中配置。否则出现 ActivityNotFound 异常。
常用主题:
默 认: @android:style/Theme.Holo.Light.DarkActionBar
启动页: @android:style/Theme.Holo.Light.NoActionBar.Fullscreen
窗体化: @android:style/Theme.Holo.Light.Dialog
exported :可以被其他应用程序访问。
launchMode :启动模式
&& lable 决定应用程序桌面的名称, icon 决定应用程序图标。 activity 中的属性设置 会覆盖 application 中的属性。
Activity 的生命周期:
onCreate --> onStart --> onResume 正常运行期 (又称 “可见期 ”、“ 聚焦期 ”)
onPause --> 暂停期 (“ 失焦期 ”):指 activity 被覆盖了一部分 (或者 有透明窗体中上面 ) ,准备退出时执行。
onStop --> 停止期 : 指 activity 完全看不到了
onDestory --> activity 已经被销毁
&& onRestart --> 从 onPause 回到 onResume 或者 从 onStop 回到 onStart
&& 想要在 创建 时 销毁,只需要在 onCreate 方法中调用 onDestory

创建一个Activity:
1、新建 java 类 --> 继承 Activity
2、重写 onCreate 方法, 加载布局 (setContentView)
3、在androidManifest 中注册该 activity
&& finish() 关闭一个activity 。
onBackPressed() :
-- 当 activity 中 返回键 被按下时调用该方法。
例如: 双击退出当前页面, 代码如下:
long lastTime = 0;
if (System.currentTimeMillis() - lastTime < 2000) {
finish();
} else {
Toast.makeText(this, "再按一次推出", Toast.LENGTH_SHORT).show();
lastTime = System.currentTimeMillis();
}
//思路: 当前系统时间 - 按返回键时的系统时间,若间隔小于两秒,退出。
监听事件:
每个组件 都有 监听事件。
View有 三个监听器:
1、onClickListener 点击事件
2、onLongClickListener 长按事件
3、onTouchListener 触摸监听
Activity 带参跳转 :
Bundle: 专门用来携带数据的一个类,里面可以存放各种基本数据类型 和 序列化 的对象。
Intent : intent 有一个 Bundle 的成员变量, 所有数据实际存放在 Bundle。
所以,Intent 可以传递 (put) 的数据类型有: 8种基本数据类型 及其 数组、String 和 String数组、两种序列化对象 Serializable 、Parcelable
例子,代码如下:
// 第一个页面
public class MainActivity extends Activity implements OnClickListener {
private EditText et_user, et_pwd;
private Button btn_login;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
init();
}
private void init() {
et_user = (EditText) findViewById(R.id.et_user);
et_pwd = (EditText) findViewById(R.id.et_pwd);
btn_login = (Button) findViewById(R.id.btn_login);
btn_login.setOnClickListener(this);
}
@Override
public void onClick(View v) {
Intent intent = new Intent(MainActivity.this, MainActivity2.class);
String name = et_user.getText().toString();
String password = et_pwd.getText().toString();
intent.putExtra("username", name);
intent.putExtra("password", password);
// 传递基本数据类型
intent.putExtra("name", "张三");
intent.putExtra("age", 50);
// 传递ArrayList数组
ArrayList<String> list = new ArrayList<String>();
list.add("中国");
list.add("广东");
list.add("深圳");
list.add("南山");
intent.putStringArrayListExtra("list", list);
// 传递 User类型的对象 必须是 序列化对象
User user = new User("李四", "123456");
intent.putExtra("user", user);
// 传递 一组User类型的对象,用ArrayList装载
ArrayList<User> userList = new ArrayList<User>();
userList.add(new User("王五", "000000"));
userList.add(new User("赵六", "111111"));
userList.add(new User("田七", "222222"));
userList.add(new User("王八", "333333"));
intent.putExtra("userList", userList);
startActivity(intent);
}
}
// 第二个页面
public class MainActivity2 extends Activity implements OnClickListener {
private TextView tv_userName, tv_password, tv_list, tv_user, tv_userLiset,
tv_zhangsan, tv_choose, tv_choose2;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity2_main);
init();
show();
}
private void show() {
// 获取Intent 中传递的数据 getIntent()
Intent intent = getIntent();
String username = intent.getStringExtra("username");
String password = intent.getStringExtra("password");
String name = intent.getStringExtra("name");
int age = intent.getIntExtra("age", 1);
// 接收ArrayList数组 getStringArrayListExtra()
ArrayList<String> list = intent.getStringArrayListExtra("list");
// 接收序列化对象 getSerializableExtra()
User user = (User) intent.getSerializableExtra("user");
@SuppressWarnings("unchecked")
// 接收 序列化 数组对象 getSerializableExtra()
ArrayList<User> userList = (ArrayList<User>) intent
.getSerializableExtra("userList");
// 将获取到的数据 设置到相应的 组件上
tv_userName.setText(username);
tv_password.setText(password);
tv_zhangsan.setText(name + " " + age);
tv_list.setText(list.toString());
System.out.println(list);
tv_user.setText(user.toString());
tv_userLiset.setText(userList.toString());
}
private void init() {
tv_userName = (TextView) findViewById(R.id.username);
tv_password = (TextView) findViewById(R.id.password);
tv_list = (TextView) findViewById(R.id.list);
tv_user = (TextView) findViewById(R.id.user);
tv_userLiset = (TextView) findViewById(R.id.userlist);
tv_zhangsan = (TextView) findViewById(R.id.zhangsan);
tv_choose = (TextView) findViewById(R.id.tv_choose);
tv_choose2 = (TextView) findViewById(R.id.tv_choose2);
}
}
重点方法 摘要:
intent.put(key,value); -- put 方法,根据所传类型的不同,调用不同的传递方法。如: putStringArrayListExtra
getIntent(); -- get 方法, 根据所获取的数据类型,选用不同的方法。如: getStringArrayListExtra 、getSerializableExtra
Activity 带参返回:
启动方法为 : startActivityForResult(intent,requestCode); -- requestCode,请求识别码
需要重写 Activity 的 onActivityResult 的方法来接收 返回数据
在返回数据的页面中 调用 setResult(resultCode,data); -- resultCode 结果识别码, data 返回的数据,同样以 Intent 传递
例子,代码如下:
// 接收页面部分代码(第一个页面)
@Override
public void onClick(View v) {
if (v.getId() == R.id.btn_car) {
Intent intent = new Intent(MainActivity2.this,BrandMainActivity.class);
// 特殊的启动方法 startActivityForResult
startActivityForResult(intent, BRAND_RESULT_CODE);
}
} //需要重写的方法 onActivityResult --用于接收数据 requestCode 请求码, resultCode 结果码, data Intent传递的数据
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(requestCode == BRAND_RESULT_CODE){
if(resultCode == RESULT_OK){
String brand = data.getStringExtra("result");
tv_choose.setText(brand);
}
}
}
// 返回数据页面部分代码(第二个页面)
Intent intent = new Intent();
// intent 依旧传递数据 put方法 ,区别在于,不需要指定页面跳转 如:Intent intent = new Intent(MainActivity.this, MainActivity2.class);
intent.putExtra("result", result);
// 返回结果的特殊方法 setResult
setResult(RESULT_OK, intent);
// 必须调用该方法,结束当前页面
finish();
重点方法 摘要:
startActivityForResult -- 特殊的启动方法
onActivityResult -- 接收返回数据 所 需要重写的 方法
setResult -- 将数据 返回 的特殊方法
反射:
通过 for循环 反射 来获取对象。 (只是简化我们的代码,实际效率比普通方法低)
可以减少 findViewById 、 setOnClickListener 等方法的次数。
代码如下:
// 使用反射来关联对象
TextView[] subject = new TextView[10]; // 反射方式获取组件
private void reflectFindViewById() {
for (int i = 0; i <= subject.length; i++) {
try {
// 反射的反射 获取 R 文件中的 .class文件 ,返回Int值
int id = R.id.class.getField("tv_subject_" + (i+1)).getInt(null);
subject[i] = (TextView) findViewById(id);
subject[i].setOnClickListener(this);
} catch (Exception e) {
e.printStackTrace();
}
}
}
// 普通方法 代码如下:
// 普通的方法获取组件
private void NomfindViewById() {
subject[0] = (TextView) findViewById(R.id.tv_subject_1);
subject[1] = (TextView) findViewById(R.id.tv_subject_2);
subject[2] = (TextView) findViewById(R.id.tv_subject_3);
subject[3] = (TextView) findViewById(R.id.tv_subject_4);
subject[4] = (TextView) findViewById(R.id.tv_subject_5);
subject[6] = (TextView) findViewById(R.id.tv_subject_6);
subject[7] = (TextView) findViewById(R.id.tv_subject_7);
subject[8] = (TextView) findViewById(R.id.tv_subject_8);
subject[9] = (TextView) findViewById(R.id.tv_subject_9);
subject[10] = (TextView) findViewById(R.id.tv_subject_10);
subject[0].setOnClickListener(this);
subject[1].setOnClickListener(this);
subject[2].setOnClickListener(this);
subject[3].setOnClickListener(this);
subject[4].setOnClickListener(this);
subject[5].setOnClickListener(this);
subject[6].setOnClickListener(this);
subject[7].setOnClickListener(this);
subject[8].setOnClickListener(this);
subject[9].setOnClickListener(this);
subject[10].setOnClickListener(this);
}
&& 注意: 组件 ID 必须要 有序 -- R.id.class.getField().getInt()
Android--Intent组件带参传递与返回的更多相关文章
- 三、angular7登录请求和路由带参传递
在 app.module.ts 中引入 HttpClientModule 并注入 import {HttpClientModule} from '@angular/common/http'; impo ...
- android 自定义组件-带图片的textView
1. 定义属性 <?xml version="1.0" encoding="utf-8"?> <resources> <decla ...
- Android四大组件
Activity 概念 活动是一种可以包含用户界面的组件,主要用于和用户交互.一个应用程序可以包含零个或多个活动. 基本用法 手动创建活动 1. 创建或加载布局 2. 在AndroidManifest ...
- 微信小程序路由带参
通过url带参传递 wxml <navigator url="../user/user?id={{item.id}}&name={{item.name}}">点 ...
- vue-父子组件传参以及无限级评论
vue父子组件的使用 <template> <div> <zi :data="data" /> </div> </templa ...
- egg-multipart + el-upload 实现带参图片上传至阿里云OSS
egg-multipart有两种模式:file和stream el-upload参数传递有两种方式:利用自带参数data和手动添加参数 egg-multipart介绍 一.file 模式下的带参传递 ...
- android布局带参返回
package com.lxj.lesson2_3ID19; import com.example.lesson2_3_id19.R; import com.lxj.other.AgeActivity ...
- 066 01 Android 零基础入门 01 Java基础语法 08 Java方法 02 带参有返回值方法
066 01 Android 零基础入门 01 Java基础语法 08 Java方法 04 带参有返回值方法 本文知识点:带参有返回值方法 说明:因为时间紧张,本人写博客过程中只是对知识点的关键步骤进 ...
- 065 01 Android 零基础入门 01 Java基础语法 08 Java方法 02 带参无返回值方法
065 01 Android 零基础入门 01 Java基础语法 08 Java方法 03 带参无返回值方法 本文知识点:带参无返回值方法 说明:因为时间紧张,本人写博客过程中只是对知识点的关键步骤进 ...
随机推荐
- Java-集合框架总结
集合框架: Java中的集合框架大类可分为Collection和Map:两者的区别: 1.Collection是单列集合:Map是双列集合 2.Collection中只有Set系列要求元素唯一:Map ...
- (转)C++——std::string类的引用计数
1.概念 Scott Meyers在<More Effective C++>中举了个例子,不知你是否还记得?在你还在上学的时候,你的父母要你不要看电视,而去复习功课,于是你把自己关在房间里 ...
- redis学习(2)--- Redis概述
一.Redis介绍 高性能键值对数据库,支持的键值对数据类型: 字符串类型 列表类型 有序集合类型 散列类型 集合类型 官方测试读写速度: 测试50个并发程序,执行10万次请求 读的速度:每秒11万次 ...
- 透过源码看看Redis中如何计算QPS
通常我们采集Redis的性能数据时,或者想要知道Redis当前的性能如何时,需要知道这个实例的QPS数据,那么这个QPS数据是如何计算的呢?我们都有哪些办法或者这个QPS ? QPS顾名思义就是每秒执 ...
- java基础:简单实现线程池
前段时间自己研究了下线程池的实现原理,通过一些源码对比,发现其实核心的东西不难,于是抽丝剥茧,决定自己实现一个简单线程池,当自已实现了出一个线程池后.发现原来那么高大上的东西也可以这么简单. 先上原理 ...
- head first python helloword
如何使用python 打出hello word 在python shell 键入print 'hello word'( python 2) or print ("hello word&qu ...
- Nodejs的模块系统以及require的机制
一.简介 Nodejs 有一个简单的模块加载系统.在 Nodejs 中,文件和模块是一一对应的(每个文件被视为一个独立的模块),这个文件可能是 JavaScript 代码,JSON 或者编译过的C/C ...
- final用法
1.修饰类 如果一个类被定义为final类型,那么该类无法被其他类继承,该类中的所有方法都是final类型的,字段是否是final类型取决于字段自身的定义. 2.修饰方法 一个方法被定义为final类 ...
- IOS 关于property的详细解法
1.格式 @property (参数1,参数2,...) 类型 名字; eg: @property(nonatomic,retain) UIWindow *window; 其中参数主要分为三类: • ...
- 【Android Developers Training】 45. 控制音频焦点
注:本文翻译自Google官方的Android Developers Training文档,译者技术一般,由于喜爱安卓而产生了翻译的念头,纯属个人兴趣爱好. 原文链接:http://developer ...