版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
目录5.1Activity的生命周期5.2Activity之间的跳转
五、Activity五、Activity
Activity对于Android应用的作用有点类似于Servlet对于Web的作用。
建立自己的Activity也需要继承Activity基类。当然,在不同应用场景下,有时候也需要继承Activity的子类。比如如果应用程序界面只包括列表,那么可以让应用程序继承ListActivity;如果应用程序界面需要实现标签页面效果,则可以让应用程序继承TabActivity。Activity类间接或直接地继承了Context、ContextWrapper、ContextThemeWrapper等基类,因此Activity可以直接调用它们的方法。五、Activity
创建一个Activity时需要实现一个或多个方法,其中最常见的就是实现onCreate(Bundlestatus)方法,该方法在Activity创建时回调。
Activity经常用到的事件:onKeyDown(intkeyCode,KeyEventevent)——按键按下事件onTouchEvent(KeyEventevent)——单击屏幕事件onKeyUp(intkeyCode,KeyEventevent)——按键松开事件onTrackballEvent(KeyEventevent)——轨迹球事件五、ActivityActivity的应用:1.创建项目新建一个名为“事件处理”的项目,如图所示。图5.1五、Activity2.编写EventActivity.java:重写需要处理的事件,之后使用Toast显示给用户。编写EventActivity.java文件:publicclassEventActivityextendsActivity{
@Override
protectedvoidonCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_event);
}五、Activity@OverridepublicbooleanonKeyDown(intkeyCode,KeyEventevent){
showInfo("按键,按下");
returnsuper.onKeyDown(keyCode,event);
}@Override
publicbooleanonKeyUp(intkeyCode,KeyEventevent){
showInfo("按键,抬起");
returnsuper.onKeyUp(keyCode,event);
}五、Activity@OverridepublicbooleanonTouchEvent(MotionEventevent){
floatx=event.getX();
floaty=event.getY();
showInfo("你单机的坐标为:("+x+":"+y+")");
returnsuper.onTouchEvent(event);}publicvoidshowInfo(Stringinfo){
Toast.makeText(this,info,Toast.LENGTH_LONG).show();
}}五、Activity3.执行程序当点击相应的事件后,EventActivity的反应:图5.2五、Activity单击屏幕时:图5.3五、ActivityActivity有三种状态,分别是运行状态、暂停状态和停止状态。Activity状态的变化是人为操作的,而这些状态的改变,也会触发一些事件,我们称它为生命周期事件。生命周期事件一共有七个:voidonCreate(BundlesavedInstanceState)
,voidonStart(),voidonRestart(),voidonResume(),voidonPause(),voidonStop(),voidonDestroy()5.1Activity的生命周期五、ActivityGoogle的官方文档关于生命周期模型的图示:图5.4五、Activity关于生命周期的案例:1.创建项目创建一个名为ActivityLife的项目:图5.5五、Activity2.编写MainActivity.java:publicclassMainActivityextendsActivity{ ButtonbtOpen,btExit; @Override protectedvoidonCreate(BundlesavedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Log.i("life","onCreate..."); btOpen=(Button)findViewById(R.id.open); btExit=(Button)findViewById(R.id.exit);五、Activity
//打开一个新的Activity btOpen.setOnClickListener(newOnClickListener(){
@Override publicvoidonClick(Viewv){
}
});
//退出当前Activity btExit.setOnClickListener(newOnClickListener(){
@Override
publicvoidonClick(Viewv){
}
});}五、Activity
首先要重写七个相应被触发的方法,以日志的形式输出相应的事件信息,然后添加两个Button,一个用来启动新的Activity,另一个用来退出当前的Activity。
重写七个生命周期: @Override
protectedvoidonStart(){
super.onStart();
Log.i("life","onStart...");
}五、Activity@Override
protectedvoidonRestart(){
super.onRestart();
Log.i("life","onRestart...");
}
@Override
protectedvoidonResume(){
super.onResume();
Log.i("life","onResume...");
}五、Activity @Override
protectedvoidonPause(){
super.onPause();
Log.i("life","onPause...");
}
@Override
protectedvoidonStop(){
super.onStop();
Log.i("life","onStop...");
}
@Override
protectedvoidonDestroy(){
super.onDestroy();
Log.i("life","onDestroy...");
}五、Activity
再新建一个OtherActivity,同样重写需要触发的生命周期事件。在清单文件AndroidManifest.xml中写入注册信息:<activityandroid:name=".OtherActivity"
android:theme="@android:style/Theme.Dialog"></activity>五、Activity处理两个Button的事件://打开一个新的ActivitybtOpen.setOnClickListener(newOnClickListener(){
@Override
publicvoidonClick(Viewv){
Intentopen=newIntent(MainActivity.this,OtherActivity.class);
startActivity(open);
}});五、Activity//退出当前ActivitybtExit.setOnClickListener(newOnClickListener(){
@Override
publicvoidonClick(Viewv){
//TODOAuto-generatedmethodstub
finish();
}});五、Activity
运行程序,单击“退出”按钮调用finish()方法结束Activity的整个事件的调用。值得注意的是,在调用finish()之后系统会先调用onPause(),再调用onStop(),之后调用onDestroy():图5.6五、Activity
启动应用之后,点击“打开新Activity”按钮,观看触发的相应事件:图5.7五、Activity
从Logcat控制台上看,新的Activity已经启动,而之前的Activity还处于可见状态,只是我们再去点击按钮已经没有反应,也就是失焦。此时MainActivity处于暂停状态,OtherActivity处于运行状态。
对生命周期做一个总结:Activity从创建到运行状态所触发的事件:onCreate()-onStart()-onResume();当Activity从运行状态到停止状态所触发的事件:onPause()-onStop();当Activity从停止状态到运行状态所触发的事件:onRestart()-onStart()-onResume();当Activity从运行状态到暂停状态所触发的事件是:onPause();当Activity从暂停状态到运行状态所触发的事件是:onResume()。
五、Activity
在很多项目中需要多个Activity,但是也有的项目只用到一个Activity。如果应用只有一个Activity,它的作用无非就是通过setContentView()方法载入不同的Layout实现页面的跳转。5.2Activity之间的跳转5.2.1利用setContentView()实现页面跳转五、Activity1.创建项目新建一个Android项目oneActivity:图5.8五、Activity2.编写activity_main.xml文件在activity_main.xml中加入一个按钮:<LinearLayoutxmlns:android="/apk/res/android" xmlns:tools="/tools"
android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context="${relativePackage}.${activityClass}"><TextView
android:layout_width="wrap_content"五、Activity
android:layout_height="wrap_content" android:text="这是第一页"/><Button android:id="@+id/btNext" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="下一页"/></LinearLayout>五、Activity3.编写two.xml新建一个Layout文件two.xml:<?xmlversion="1.0"encoding="utf-8"?><LinearLayoutxmlns:android="/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"><TextView、
android:id="@+id/textView1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="这是第二页"/><Button android:id="@+id/btUp" android:layout_width="wrap_content" android:layout_height="wrap_content"
android:text="上一页"/></LinearLayout>五、Activity4.编写MainActivity.java在MainActivity中,一开始加载的是main.xml,单击“下一页”按钮,显示第二页界面,然后单击“上一页”按钮,返回原页面,实现不同页面之间的转换效果:MainActivity.java文件:publicclassMainActivityextendsActivity{
@Override protectedvoidonCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ButtonbtNext=(Button)findViewById(R.id.btNext);五、ActivitybtNext.setOnClickListener(newOnClickListener(){
@Override publicvoidonClick(Viewv){
//TODOAuto-generatedmethodstub
nextLayout();
}
});} publicvoidnextLayout(){
setContentView(R.layout.two);
ButtonbtUp=(Button)findViewById(R.id.btUp);五、Activity//点击显示上一页btUp.setOnClickListener(newOnClickListener(){
@Override
publicvoidonClick(Viewv){
setContentView(R.layout.activity_main); findViewById(R.id.btNext).setOnClickListener(newOnClickListener(){
@Override
publicvoidonClick(Viewv){
//TODOAuto-generatedmethodstub
nextLayout();
}
});
}
});
}}五、Activity运行结果:
图5.9五、Activity1.创建项目新建另一个OtherActivity,并同时创建该Activity的布局文件,在清单文件中注册该Activity。MainActivity的布局文件:5.2.2利用Intent实现Activity之间的跳转五、Activity<LinearLayoutxmlns:android=http:///apk/res/android xmlns:tools="/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context="${relativePackage}.${activityClass}">五、Activity<TextView
android:id="@+id/tvOne"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="第一个activity"
android:textSize="50sp"/><EditText
android:id="@+id/etText"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>五、Activity<Button
android:id="@+id/open"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="跳到第二个"
android:textSize="50sp"/></LinearLayout>五、Activityactivity_other.xml文件:<LinearLayoutxmlns:android="/apk/res/android"
xmlns:tools="/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context="${relativePackage}.${activityClass}">五、Activity<TextView
android:id="@+id/tvShow"
android:textSize="50sp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="第二个activity"/></LinearLayout>五、Activity2.编写MainActivity.java在MainActivity中单击按钮,打开OtherActivity,就用到了Intent(意图)。Intent用于激活组件和在组件中传递数据:publicclassMainActivityextendsActivity{
ButtonbtOpen;
EditTextetText;
TextViewtvOne;
五、Activity
@Override
protectedvoidonCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Intentintent=getIntent();
etText=(EditText)findViewById(R.id.etText);
tvOne=(TextView)findViewById(R.id.tvOne);
btOpen=(Button)findViewById(R.id.open);五、ActivitybtOpen.setOnClickListener(newOnClickListener(){
@Override
publicvoidonClick(Viewv){
Stringcontent=etText.getText().toString().trim();
//打开OtherActivity
Intentintent=newIntent(MainActivity.this,OtherActivity.class);
startActivity(intent); } }); } }}五、Activity3.运行结果运行应用,结果左图所示,单击按钮之后,结果右图所示。
图5.10五、Activity使用Intent可以打开一个新的组件,同时也可以携带数据给新的组件。在上个案例中,给activity_main.xml布局文件增加EditText控件:<EditText
android:id="@+id/etText"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>5.2.3Activity之间的数据交互五、Activity修改MainActivity.java代码:publicclassMainActivityextendsActivity{
ButtonbtOpen;
EditTextetText;
TextViewtvOne;
@Override
protectedvoidonCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Intentintent=getIntent();
etText=(EditText)findViewById(R.id.etText);
tvOne=(TextView)findViewById(R.id.tvOne);
btOpen=(Button)findViewById(R.id.open);五、ActivitybtOpen.setOnClickListener(newOnClickListener(){
@Override
publicvoidonClick(Viewv){
Stringcontent=etText.getText().toString().trim();
//打开OtherActivity
Intentintent=newIntent(MainActivity.this,OtherActivity.class);
intent.putExtra("content",content);
//startActivity(intent); //删除此行代码
startActivityForResult(intent,1);
}
});}五、Activity @Override
protectedvoidonActivityResult(intrequestCode,intresultCode,Intentdata){
//TODOAuto-generatedmethodstub
Stringcontent=data.getStringExtra("result");
tvOne.setText(content);
}}五、Activity修改activity_other.xml布局文件,增加返回按钮:<Button
android:textSize="50sp"
android:id="@+id/btExit"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="返回"/>五、Activity在OtherActivity.java中修改onCreate()方法,得到传递来的参数,并且通过TextView显示出来:publicclassOtherActivityextendsActivity{
TextViewtvShow;
ButtonbtExit;
@Override
protectedvoidonCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_other);
Intentintent=getIntent();
tvShow=(TextView)findViewById(R.id.tvShow);
btExit=(Button)findViewById(R.id.btExit);
//得到Intent传递来的信息
finalStringcontent=intent.getStringExtra("content");
//将信息显示出来
tvShow.setText(content);五、ActivitybtExit.setOnClickListener(newOnClickListener(){
@Override
publicvoidonClick(Viewv){
//TODOAuto-generatedmethodstub
//实例化一个意图对象
Intentdata=newIntent();
//绑定数据
data.putExtra("result","otherActivity"+content);
//设置结果码已经意图对象
setResult(2,data);
//挂关闭Activity
OtherActivity.this.finish();
}
});
}}五、Activity在第一个界面中输入“你好”,点击跳转按钮,运行如图:OtherActivity界面显示了我们输入的信息。图5.11五、Activity
这样就实现了从一个Activity跳转到另外一个Activity时携带信息数据。有些时候需要跳转的页面返回数据,如何实现呢?我们需要使用新的API实现组件的跳转:startActivityForResult(Intentintent,intrequestCode):
参数1:intent意图,跳转到哪个组件。
参数2:requestCode:请求码,请求码的值是根据业务需要由自已设定的,用于标识请求来源。例如:一个Activity有两个按钮,点击这两个按钮都会打开同一个Activity,不管是哪个按钮打开新Activity,当这个新Activity关闭后,系统都会调用前面Activity的onActivityResult(intrequestCode,intresultCode,Intentdata)方法。setResult(intresultCode,Intentintent)五、Activity
当通过startActivityForResult(Intentintent,intrequestCode)这一方法打开新的界面返回数据时,通过调用此方法,携带数据返回给上一组件。
参数1:resultCode结果码。一个Activity可以通过startActivityForResult打开不同的Activity。当都需要数据返回时,通过此结果码来区分是由哪一个Activity返回的数据。
参数2:intent意图。protectedvoidonActivityResult(intrequestCode,intresultCode,Intentdata)
当返回上一界面时,想得到返回的数据,需要重写此方法。
参数1:requestCode 请求码
参数2:resultCode 结果码
参数3:data 返回参数五、Activity在案例中,修改以下代码:在MainActivity.java中修改如下:publicclassMainActivityextendsActivity{
ButtonbtOpen;
EditTextetText;
TextViewtvOne;
@Override
protectedvoidonCreate(BundlesavedInstanceStat
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 养老院老人康复理疗师福利待遇制度
- 体积单位间的进率课件
- 《人力资源招聘测试》课件
- 2024年桶装水配送与水质检测服务合同书3篇
- 房屋赠与合同
- 2024年新型城镇化项目施工工伤赔偿与责任共担合同2篇
- 2024年生猪销售与养殖场市场营销策略合同3篇
- 2025年黔南驾校考试货运从业资格证考试
- 2025年沈阳货运资格证考试答题20
- 2025年朝阳从业资格证货运考试答案
- 中建基础设施类物资验收作业指导手册
- 2025届高考语文复习之变换句式
- 期末复习(试题)-2024-2025学年人教PEP版英语六年级上册
- 动静脉内瘘狭窄
- 大数据分析师招聘面试题与参考回答(某大型国企)
- 数学四年级上册《角的分类》同步练习题(含答案)
- 山东省淄博市2023-2024学年七年级上学期期末数学试题(含答案)
- 2024中国雄安集团限公司招聘45人高频难、易错点500题模拟试题附带答案详解
- 天翼云从业者认证考试题库及答案
- 四年级数学(除数是两位数)计算题专项练习及答案
- 健身数据隐私和安全
评论
0/150
提交评论