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

2025-10-27 18:15:42

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。不存在时创建放于新栈中,存在则置顶。

声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
猜你喜欢