使用Bundle在Activity之间进行数据交换

 时间:2026-02-14 20:39:17

1、  Activity存放于Activity栈中,当前活动的Activity位于栈顶。Activity直接或间接的继承了Context,ContextWrapper,ContextThemeWrapper等基类,可以直接调用他们的方法。

  Expandable ListActivity实现可展开列表界面的Avtivity;ListActivity实现列表界面的Activity。AccountAuthenticatorActivity实现账户管理界面的Activity;

  TabActivity 实现TAB界面的Activity;preferenceActivity实现程序参数设置,存储界面的Acitivity,其中参数设置之后会自动永久保存到系统:data/data/<应用程序包名>/shared_prefs路径下文件名为<应用程序包名 >_preferences.xml;LauncherActivity实现Activity列表界面的Activity,单击列表项该Activity被启动。

    

2、  

  2.在AndroidManifest中配置Activity

     在<application/>中添加<activity/>子元素配置activity:name:实现该Activity的类名,icon:图标,label:标签,exported:指定是否可以被其他应用调用,launcherMode:加载模式,<intent-filter>元素指定Activity可相应的Intent。

3、  3.启动,关闭Activity

     应用中多个Activity只有一个入口Activity,其他Activity由入口直接或间接启动。启动方法:startActivity(Intent intent);或startActivityForRequest(Intent intent,int requestCode);requestCode用于标识请求来源,有开发者自行设置。

     关闭Activity:finish();结束当前Activity 或 finish(int requestCode);结束startActivityForRequest(Intent intent,int requestCode);启动的Activity。

     Intent intent = new Intent(MainActivity.this,SecondActivity.class);

     startActivity(intent);

     finish();

4、  4.使用Bundle在Activity之间进行数据交换

     在Activity之间Intent传递信息时可以携带需要交换的数据:

     putExtras(Bundle data) 向Intent中存放需要传输的数据包。    ------      Bundle getExtras() 取出Intent存放的数据包。

     putExtra(String name,XXX value) 按key-value对的形式向Intent存入数据。   ------      getXXXExtra() 从Intent按key取出指定类型的数据。

     Bundle是一个数据包,存入数据的方法:

     putXxx(String key,Xxx data) 向Bundle中存入Int,Long等类型数据       ------      getXxx(String key)从Bundle中取出Int,Long等各种类型数据。

     putSerializable(String key,Serializable data) 向Bundle中放入了一个可序列化的对象      ------     getSerializable(String key,Serializable data)从Bundle中取出一个可序列化的对象

     

     Person p = new Person(name.getText().toString(),passwd.getText().toString());  person类是一个DTO对象,该类实现了Serializable接口,因此person对象可实例化。

     Bundle bundle = new Bundle();   创建一个Bundle对象

     bundle.putSerializable("person",p);  存入数据

     Intent intent = new Intent(MainActivity.this,ResultActivity.class);    创建一个Intent

     intent.putExtras(bundle);    intent携带bundle传输

     Intent intent = getIntent();    获取到启动该Activity的intent

     Person p = (Person)intent.getSerializableExtra("person");     通过Intent取出他携带的Bundle数据包中的数据

     name.setText(p.getName());     在TextView中显示出来

     passwd.setText(p.getPasswd());

5、  5.启动Activity并返回结果

     用startActivityForResult(Intent intent,int requestCode )方法来启动另一个Activity,当另一个Activity完成结果时通过setResult()方法设置处理结果,在开始Activity中重写onActivityResult(int requestCode,int resultCode,Intent intent),他在返回结果时会被触发并处理特定事件。

  

     startActivityForResult(intent,0);    启动制定Activity并等待返回的结果,请求码为0,用于标识请求。

     public void onActivityResult(int requestCode,int resultCode,Intent intent ){

          if(requestCode ==0&&resultCode ==0){           处理请求码和结果码都是0的特殊事件

              Bundle data = intent.getExtras();          取出intent中的Extras数据

              String resultCity = data.getString("city");  取出Bundle中的数据

              city.setText(resultCity);

          }

     }

     

     Intent intent = getIntent();      获取启动该Activity的Intent

     intent.puExtra("city",cities[m][n]);    存放数据

     SelectCityActivity.this.setResult(0,intent);     设置结果码,并设置结束之后退回的Activity

     SelectCityActivity.this.finish();

6、  6.Activity的生命周期和启动模式

     onCreate()创建时回调,onStart()启动时回调,onResume()恢复Activity,onRestart()重新启动,onPause()暂停时回调,onStop停止activity,onDestorp()销毁。

     standard默认启动模式,总会为新的activity创建新实例并添加到当前Task栈中

     singleTop启动的新Activity位于栈顶时,不会创建目标Activity的实例。

     singleTask模式:不存在时会创建并置于栈顶,已经位于栈顶不会创建新的实例,已经存在但不在栈顶时,移出上面所有Activity。

     singleinstance模式,无论从哪个Task启动目标Activity,只会创建一个实例,并用一个全新的Task栈加载该Activity。不存在时创建放于新栈中,存在则置顶。

  • 苹果酸奶龟苓膏
  • 查看Myeclipse中java类的具体内容及继承关系
  • 茶汤里的化学物质
  • 业务流程图该怎么画
  • LOL虚空先知怎么玩
  • 热门搜索
    关于英语手抄报 初中消防安全手抄报 军训手抄报图片 大手拉小手手抄报 诚信从我做起手抄报 感恩老师的手抄报内容 科技点亮生活手抄报 感恩的心手抄报图片 与法同行手抄报内容 我爱祖国手抄报资料