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的生命周期中会调用的函数

原创粉丝点击