多语言展示
当前在线:1651今日阅读:84今日分享:32

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

使用Bundle在Activity之间进行数据交换
方法/步骤
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     在中添加子元素配置activity:name:实现该Activity的类名,icon:图标,label:标签,exported:指定是否可以被其他应用调用,launcherMode:加载模式,元素指定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。不存在时创建放于新栈中,存在则置顶。

推荐信息