《Android實(shí)戰(zhàn)基礎(chǔ)教程》課件第五章_第1頁(yè)
《Android實(shí)戰(zhàn)基礎(chǔ)教程》課件第五章_第2頁(yè)
《Android實(shí)戰(zhàn)基礎(chǔ)教程》課件第五章_第3頁(yè)
《Android實(shí)戰(zhàn)基礎(chǔ)教程》課件第五章_第4頁(yè)
《Android實(shí)戰(zhàn)基礎(chǔ)教程》課件第五章_第5頁(yè)
已閱讀5頁(yè),還剩52頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

目錄5.1Activity的生命周期5.2Activity之間的跳轉(zhuǎn)

五、Activity五、Activity

Activity對(duì)于A(yíng)ndroid應(yīng)用的作用有點(diǎn)類(lèi)似于Servlet對(duì)于Web的作用。

建立自己的Activity也需要繼承Activity基類(lèi)。當(dāng)然,在不同應(yīng)用場(chǎng)景下,有時(shí)候也需要繼承Activity的子類(lèi)。比如如果應(yīng)用程序界面只包括列表,那么可以讓?xiě)?yīng)用程序繼承ListActivity;如果應(yīng)用程序界面需要實(shí)現(xiàn)標(biāo)簽頁(yè)面效果,則可以讓?xiě)?yīng)用程序繼承TabActivity。Activity類(lèi)間接或直接地繼承了Context、ContextWrapper、ContextThemeWrapper等基類(lèi),因此Activity可以直接調(diào)用它們的方法。五、Activity

創(chuàng)建一個(gè)Activity時(shí)需要實(shí)現(xiàn)一個(gè)或多個(gè)方法,其中最常見(jiàn)的就是實(shí)現(xiàn)onCreate(Bundlestatus)方法,該方法在A(yíng)ctivity創(chuàng)建時(shí)回調(diào)。

Activity經(jīng)常用到的事件:onKeyDown(intkeyCode,KeyEventevent)——按鍵按下事件onTouchEvent(KeyEventevent)——單擊屏幕事件onKeyUp(intkeyCode,KeyEventevent)——按鍵松開(kāi)事件onTrackballEvent(KeyEventevent)——軌跡球事件五、ActivityActivity的應(yīng)用:1.創(chuàng)建項(xiàng)目新建一個(gè)名為“事件處理”的項(xiàng)目,如圖所示。圖5.1五、Activity2.編寫(xiě)EventActivity.java:重寫(xiě)需要處理的事件,之后使用Toast顯示給用戶(hù)。編寫(xiě)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("你單機(jī)的坐標(biāo)為:("+x+":"+y+")");

returnsuper.onTouchEvent(event);}publicvoidshowInfo(Stringinfo){

Toast.makeText(this,info,Toast.LENGTH_LONG).show();

}}五、Activity3.執(zhí)行程序當(dāng)點(diǎn)擊相應(yīng)的事件后,EventActivity的反應(yīng):圖5.2五、Activity單擊屏幕時(shí):圖5.3五、ActivityActivity有三種狀態(tài),分別是運(yùn)行狀態(tài)、暫停狀態(tài)和停止?fàn)顟B(tài)。Activity狀態(tài)的變化是人為操作的,而這些狀態(tài)的改變,也會(huì)觸發(fā)一些事件,我們稱(chēng)它為生命周期事件。生命周期事件一共有七個(gè):voidonCreate(BundlesavedInstanceState)

,voidonStart(),voidonRestart(),voidonResume(),voidonPause(),voidonStop(),voidonDestroy()5.1Activity的生命周期五、ActivityGoogle的官方文檔關(guān)于生命周期模型的圖示:圖5.4五、Activity關(guān)于生命周期的案例:1.創(chuàng)建項(xiàng)目創(chuàng)建一個(gè)名為ActivityLife的項(xiàng)目:圖5.5五、Activity2.編寫(xiě)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

//打開(kāi)一個(gè)新的Activity btOpen.setOnClickListener(newOnClickListener(){

@Override publicvoidonClick(Viewv){

}

});

//退出當(dāng)前Activity btExit.setOnClickListener(newOnClickListener(){

@Override

publicvoidonClick(Viewv){

}

});}五、Activity

首先要重寫(xiě)七個(gè)相應(yīng)被觸發(fā)的方法,以日志的形式輸出相應(yīng)的事件信息,然后添加兩個(gè)Button,一個(gè)用來(lái)啟動(dòng)新的Activity,另一個(gè)用來(lái)退出當(dāng)前的Activity。

重寫(xiě)七個(gè)生命周期: @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

再新建一個(gè)OtherActivity,同樣重寫(xiě)需要觸發(fā)的生命周期事件。在清單文件AndroidManifest.xml中寫(xiě)入注冊(cè)信息:<activityandroid:name=".OtherActivity"

android:theme="@android:style/Theme.Dialog"></activity>五、Activity處理兩個(gè)Button的事件://打開(kāi)一個(gè)新的ActivitybtOpen.setOnClickListener(newOnClickListener(){

@Override

publicvoidonClick(Viewv){

Intentopen=newIntent(MainActivity.this,OtherActivity.class);

startActivity(open);

}});五、Activity//退出當(dāng)前ActivitybtExit.setOnClickListener(newOnClickListener(){

@Override

publicvoidonClick(Viewv){

//TODOAuto-generatedmethodstub

finish();

}});五、Activity

運(yùn)行程序,單擊“退出”按鈕調(diào)用finish()方法結(jié)束Activity的整個(gè)事件的調(diào)用。值得注意的是,在調(diào)用finish()之后系統(tǒng)會(huì)先調(diào)用onPause(),再調(diào)用onStop(),之后調(diào)用onDestroy():圖5.6五、Activity

啟動(dòng)應(yīng)用之后,點(diǎn)擊“打開(kāi)新Activity”按鈕,觀(guān)看觸發(fā)的相應(yīng)事件:圖5.7五、Activity

從Logcat控制臺(tái)上看,新的Activity已經(jīng)啟動(dòng),而之前的Activity還處于可見(jiàn)狀態(tài),只是我們?cè)偃c(diǎn)擊按鈕已經(jīng)沒(méi)有反應(yīng),也就是失焦。此時(shí)MainActivity處于暫停狀態(tài),OtherActivity處于運(yùn)行狀態(tài)。

對(duì)生命周期做一個(gè)總結(jié):Activity從創(chuàng)建到運(yùn)行狀態(tài)所觸發(fā)的事件:onCreate()-onStart()-onResume();當(dāng)Activity從運(yùn)行狀態(tài)到停止?fàn)顟B(tài)所觸發(fā)的事件:onPause()-onStop();當(dāng)Activity從停止?fàn)顟B(tài)到運(yùn)行狀態(tài)所觸發(fā)的事件:onRestart()-onStart()-onResume();當(dāng)Activity從運(yùn)行狀態(tài)到暫停狀態(tài)所觸發(fā)的事件是:onPause();當(dāng)Activity從暫停狀態(tài)到運(yùn)行狀態(tài)所觸發(fā)的事件是:onResume()。

五、Activity

在很多項(xiàng)目中需要多個(gè)Activity,但是也有的項(xiàng)目只用到一個(gè)Activity。如果應(yīng)用只有一個(gè)Activity,它的作用無(wú)非就是通過(guò)setContentView()方法載入不同的Layout實(shí)現(xiàn)頁(yè)面的跳轉(zhuǎn)。5.2Activity之間的跳轉(zhuǎn)5.2.1利用setContentView()實(shí)現(xiàn)頁(yè)面跳轉(zhuǎn)五、Activity1.創(chuàng)建項(xiàng)目新建一個(gè)Android項(xiàng)目oneActivity:圖5.8五、Activity2.編寫(xiě)activity_main.xml文件在activity_main.xml中加入一個(gè)按鈕:<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="這是第一頁(yè)"/><Button android:id="@+id/btNext" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="下一頁(yè)"/></LinearLayout>五、Activity3.編寫(xiě)two.xml新建一個(gè)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="這是第二頁(yè)"/><Button android:id="@+id/btUp" android:layout_width="wrap_content" android:layout_height="wrap_content"

android:text="上一頁(yè)"/></LinearLayout>五、Activity4.編寫(xiě)MainActivity.java在MainActivity中,一開(kāi)始加載的是main.xml,單擊“下一頁(yè)”按鈕,顯示第二頁(yè)界面,然后單擊“上一頁(yè)”按鈕,返回原頁(yè)面,實(shí)現(xiàn)不同頁(yè)面之間的轉(zhuǎn)換效果: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//點(diǎn)擊顯示上一頁(yè)btUp.setOnClickListener(newOnClickListener(){

@Override

publicvoidonClick(Viewv){

setContentView(R.layout.activity_main); findViewById(R.id.btNext).setOnClickListener(newOnClickListener(){

@Override

publicvoidonClick(Viewv){

//TODOAuto-generatedmethodstub

nextLayout();

}

});

}

});

}}五、Activity運(yùn)行結(jié)果:

圖5.9五、Activity1.創(chuàng)建項(xiàng)目新建另一個(gè)OtherActivity,并同時(shí)創(chuàng)建該Activity的布局文件,在清單文件中注冊(cè)該Activity。MainActivity的布局文件:5.2.2利用Intent實(shí)現(xiàn)Activity之間的跳轉(zhuǎn)五、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="第一個(gè)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="跳到第二個(gè)"

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="第二個(gè)activity"/></LinearLayout>五、Activity2.編寫(xiě)MainActivity.java在MainActivity中單擊按鈕,打開(kāi)OtherActivity,就用到了Intent(意圖)。Intent用于激活組件和在組件中傳遞數(shù)據(jù):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();

//打開(kāi)OtherActivity

Intentintent=newIntent(MainActivity.this,OtherActivity.class);

startActivity(intent); } }); } }}五、Activity3.運(yùn)行結(jié)果運(yùn)行應(yīng)用,結(jié)果左圖所示,單擊按鈕之后,結(jié)果右圖所示。

圖5.10五、Activity使用Intent可以打開(kāi)一個(gè)新的組件,同時(shí)也可以攜帶數(shù)據(jù)給新的組件。在上個(gè)案例中,給activity_main.xml布局文件增加EditText控件:<EditText

android:id="@+id/etText"

android:layout_width="match_parent"

android:layout_height="wrap_content"/>5.2.3Activity之間的數(shù)據(jù)交互五、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();

//打開(kāi)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()方法,得到傳遞來(lái)的參數(shù),并且通過(guò)TextView顯示出來(lái):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傳遞來(lái)的信息

finalStringcontent=intent.getStringExtra("content");

//將信息顯示出來(lái)

tvShow.setText(content);五、ActivitybtExit.setOnClickListener(newOnClickListener(){

@Override

publicvoidonClick(Viewv){

//TODOAuto-generatedmethodstub

//實(shí)例化一個(gè)意圖對(duì)象

Intentdata=newIntent();

//綁定數(shù)據(jù)

data.putExtra("result","otherActivity"+content);

//設(shè)置結(jié)果碼已經(jīng)意圖對(duì)象

setResult(2,data);

//掛關(guān)閉Activity

OtherActivity.this.finish();

}

});

}}五、Activity在第一個(gè)界面中輸入“你好”,點(diǎn)擊跳轉(zhuǎn)按鈕,運(yùn)行如圖:OtherActivity界面顯示了我們輸入的信息。圖5.11五、Activity

這樣就實(shí)現(xiàn)了從一個(gè)Activity跳轉(zhuǎn)到另外一個(gè)Activity時(shí)攜帶信息數(shù)據(jù)。有些時(shí)候需要跳轉(zhuǎn)的頁(yè)面返回?cái)?shù)據(jù),如何實(shí)現(xiàn)呢?我們需要使用新的API實(shí)現(xiàn)組件的跳轉(zhuǎn):startActivityForResult(Intentintent,intrequestCode):

參數(shù)1:intent意圖,跳轉(zhuǎn)到哪個(gè)組件。

參數(shù)2:requestCode:請(qǐng)求碼,請(qǐng)求碼的值是根據(jù)業(yè)務(wù)需要由自已設(shè)定的,用于標(biāo)識(shí)請(qǐng)求來(lái)源。例如:一個(gè)Activity有兩個(gè)按鈕,點(diǎn)擊這兩個(gè)按鈕都會(huì)打開(kāi)同一個(gè)Activity,不管是哪個(gè)按鈕打開(kāi)新Activity,當(dāng)這個(gè)新Activity關(guān)閉后,系統(tǒng)都會(huì)調(diào)用前面Activity的onActivityResult(intrequestCode,intresultCode,Intentdata)方法。setResult(intresultCode,Intentintent)五、Activity

當(dāng)通過(guò)startActivityForResult(Intentintent,intrequestCode)這一方法打開(kāi)新的界面返回?cái)?shù)據(jù)時(shí),通過(guò)調(diào)用此方法,攜帶數(shù)據(jù)返回給上一組件。

參數(shù)1:resultCode結(jié)果碼。一個(gè)Activity可以通過(guò)startActivityForResult打開(kāi)不同的Activity。當(dāng)都需要數(shù)據(jù)返回時(shí),通過(guò)此結(jié)果碼來(lái)區(qū)分是由哪一個(gè)Activity返回的數(shù)據(jù)。

參數(shù)2:intent意圖。protectedvoidonActivityResult(intrequestCode,intresultCode,Intentdata)

當(dāng)返回上一界面時(shí),想得到返回的數(shù)據(jù),需要重寫(xiě)此方法。

參數(shù)1:requestCode 請(qǐng)求碼

參數(shù)2:resultCode 結(jié)果碼

參數(shù)3:data 返回參數(shù)五、Activity在案例中,修改以下代碼:在MainActivity.java中修改如下:publicclassMainActivityextendsActivity{

ButtonbtOpen;

EditTextetText;

TextViewtvOne;

@Override

protectedvoidonCreate(BundlesavedInstanceStat

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論