Android--Intent组件带参传递与返回

厌伴老儒烹瓠叶,强随举子踏槐花。这篇文章主要讲述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
【Android--Intent组件带参传递与返回】& &   想要在 创建 时 销毁,只需要在 onCreate 方法中调用 onDestory

Android--Intent组件带参传递与返回

文章图片

 
 
创建一个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()
 

    推荐阅读