《Android实战基础教程》课件第五章_第1页
《Android实战基础教程》课件第五章_第2页
《Android实战基础教程》课件第五章_第3页
《Android实战基础教程》课件第五章_第4页
《Android实战基础教程》课件第五章_第5页
已阅读5页,还剩52页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

目录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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论