Activity
来源:互联网 发布:avi转gif软件 编辑:程序博客网 时间:2024/05/03 00:22
Activity 是android重要的组件之一,相当于ios中的controller,作为一种界面容器使用。
当程序中包含多个activity的时候,需要在配置文件中设置相应的参数,下面是配置的一个例子,要指定一个主activity。
<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android" package="org.crazyit.activity" android:versionCode="1" android:versionName="1.0" > <application android:icon="@drawable/icon" android:label="@string/app_name" > <activity android:name=".OtherActivity" android:label="@string/app_name" > <!-- 指定该Activity是程序的入口 --> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <!-- 定义两个Activity --> <activity android:name=".ExpandableListActivityTest" android:label="查看星际兵种" > </activity> <activity android:name=".PreferenceActivityTest" android:label="设置程序参数" > </activity> </application></manifest>
其中<intent-filter>....</intent-filter>标签中包含的就是设置主activity的。
下面是一段由一个activity启动第二个activity的代码
public class StartActivity extends Activity{@Overridepublic void onCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.main);//获取应用程序中的bn按钮Button bn = (Button)findViewById(R.id.bn);//为bn按钮绑定事件监听器bn.setOnClickListener(new OnClickListener(){@Overridepublic void onClick(View source){//创建需要启动的Activity对应的IntentIntent intent = new Intent(StartActivity.this, SecondActivity.class);//启动intent对应的ActivitystartActivity(intent);}});}}
public class SecondActivity extends Activity{@Overridepublic void onCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.second);//获取应用程序中的previous按钮Button previous = (Button)findViewById(R.id.previous);//获取应用程序中的close按钮Button close = (Button)findViewById(R.id.close);//为previous按钮绑定事件监听器previous.setOnClickListener(new OnClickListener(){@Overridepublic void onClick(View source){//获取启动当前Activity的上一个IntentIntent intent = new Intent(SecondActivity.this, StartActivity.class);//启动intent对应的ActivitystartActivity(intent);}});//为close按钮绑定事件监听器close.setOnClickListener(new OnClickListener(){@Overridepublic void onClick(View source){//获取启动当前Activity的上一个IntentIntent intent = new Intent(SecondActivity.this, StartActivity.class);//启动intent对应的ActivitystartActivity(intent);//结束当前Activityfinish();}});}}
如果在启动其他activity之后加上finish()函数,那么就会结束自己。
使用bundle在两个activity之间传输数据。
public class BundleTest extends Activity{@Overridepublic void onCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.main);Button bn = (Button)findViewById(R.id.bn);bn.setOnClickListener(new OnClickListener(){@Overridepublic void onClick(View v){EditText name = (EditText)findViewById(R.id.name);EditText passwd = (EditText)findViewById(R.id.passwd);RadioButton male = (RadioButton)findViewById(R.id.male);String gender = male.isChecked() ? "男 " : "女";Person p = new Person(name.getText().toString(), passwd.getText().toString() , gender);//创建一个Bundle对象Bundle data = new Bundle();data.putSerializable("person", p);//创建一个IntentIntent intent = new Intent(BundleTest.this, ResultActivity.class);intent.putExtras(data);//启动intent对应的ActivitystartActivity(intent);}});}}发送方将数据打包之后,通过bundle把数据打包,然后使用intent来传输。
下面是接收方的数据处理
public class ResultActivity extends Activity{@Overridepublic void onCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.result);TextView name = (TextView)findViewById(R.id.name);TextView passwd = (TextView)findViewById(R.id.passwd);TextView gender = (TextView)findViewById(R.id.gender);//获取启动该Result的IntentIntent intent = getIntent();//获取该intent所携带的数据Bundle data = intent.getExtras();//从Bundle数据包中取出数据Person p = (Person)data.getSerializable("person");name.setText("您的用户名为:" + p.getName());passwd.setText("您的密码为:" + p.getPass());gender.setText("您的性别为:" + p.getGender());}}上面是从一个activity向下一个activity传数据,下面的例子是后一个activity做完一些操作后,向他的前一个activity回传数据。
bn = (Button)findViewById(R.id.bn);city = (EditText)findViewById(R.id.city);//为按钮绑定事件监听器bn.setOnClickListener(new OnClickListener(){@Overridepublic void onClick(View source){//创建需要对应于目标Activity的IntentIntent intent = new Intent(ActivityForResult.this , SelectCityActivity.class);//启动指定Activity并等待返回的结果,其中0是请求码,用于标识该请求startActivityForResult(intent , 0);}});//重写该方法,该方法以回调的方式来获取指定Activity返回的结果@Overridepublic void onActivityResult(int requestCode , int resultCode, Intent intent){//当requestCode、resultCode同时为0,也就是处理特定的结果if (requestCode == 0&& resultCode == 0){//取出Intent里的Extras数据Bundle data = intent.getExtras();//取出Bundle中的数据String resultCity = data.getString("city");//修改city文本框的内容city.setText(resultCity);}}使用requestcode和resultcode可以唯一确定是哪个activity回传过来的信息。在第二个activity中使用下面的代码来处理并回传数据。
getExpandableListView().setOnChildClickListener(new OnChildClickListener(){@Overridepublic boolean onChildClick(ExpandableListView parent, View source,int groupPosition, int childPosition, long id){//获取启动该Activity之前的Activity对应的IntentIntent intent = getIntent();Bundle data = new Bundle();data.putString("city" ,cities[groupPosition][childPosition]);intent.putExtras(data);// 设置该SelectActivity的结果码,并设置结束之后退回的ActivitySelectCityActivity.this.setResult(0 , intent);//结束SelectCityActivity。SelectCityActivity.this.finish();return false;}});
最后看下activity的生命周期
这个图片已经很清楚说明一个activity的生命周期中会调用的函数
- Activity
- Activity
- Activity。。。
- Activity
- Activity
- Activity
- Activity
- Activity
- Activity
- Activity
- activity
- Activity
- Activity
- activity
- Activity
- activity
- activity
- activity
- (莱昂氏unix源代码分析导读-44) 文件系统资源
- Ubuntu 12.04 安装磊科无线网卡驱动
- Eclipse c++注释模板以及注释文档生成
- 提高班-培养“狼”一样的学生
- 写代码其实很容易,但正确的、健壮的程序却不容易
- Activity
- SQL SERVER 同时对多个服务器执行语句
- C++ typedef使用方法总结
- CX51 用户手册----STRING伪指令
- map 遍历方法
- 未启用当前数据库的 SQL Server Service Broker
- Linux下: Eclipse安装配置OpenCV2.1,用C++调用OpenCV过程 及 测试实例
- 浏览器Http请求头部比较
- 我对getaddrinfo的理解