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

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

目錄5.1Activity的生命周期5.2Activity之間的跳轉

五、Activity五、Activity

Activity對于Android應用的作用有點類似于Servlet對于Web的作用。

建立自己的Activity也需要繼承Activity基類。當然,在不同應用場景下,有時候也需要繼承Activity的子類。比如如果應用程序界面只包括列表,那么可以讓應用程序繼承ListActivity;如果應用程序界面需要實現標簽頁面效果,則可以讓應用程序繼承TabActivity。Activity類間接或直接地繼承了Context、ContextWrapper、ContextThemeWrapper等基類,因此Activity可以直接調用它們的方法。五、Activity

創(chuàng)建一個Activity時需要實現一個或多個方法,其中最常見的就是實現onCreate(Bundlestatus)方法,該方法在Activity創(chuàng)建時回調。

Activity經常用到的事件:onKeyDown(intkeyCode,KeyEventevent)——按鍵按下事件onTouchEvent(KeyEventevent)——單擊屏幕事件onKeyUp(intkeyCode,KeyEventevent)——按鍵松開事件onTrackballEvent(KeyEventevent)——軌跡球事件五、ActivityActivity的應用:1.創(chuàng)建項目新建一個名為“事件處理”的項目,如圖所示。圖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.執(zhí)行程序當點擊相應的事件后,EventActivity的反應:圖5.2五、Activity單擊屏幕時:圖5.3五、ActivityActivity有三種狀態(tài),分別是運行狀態(tài)、暫停狀態(tài)和停止狀態(tài)。Activity狀態(tài)的變化是人為操作的,而這些狀態(tài)的改變,也會觸發(fā)一些事件,我們稱它為生命周期事件。生命周期事件一共有七個:voidonCreate(BundlesavedInstanceState)

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

首先要重寫七個相應被觸發(fā)的方法,以日志的形式輸出相應的事件信息,然后添加兩個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,同樣重寫需要觸發(fā)的生命周期事件。在清單文件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()之后系統(tǒng)會先調用onPause(),再調用onStop(),之后調用onDestroy():圖5.6五、Activity

啟動應用之后,點擊“打開新Activity”按鈕,觀看觸發(fā)的相應事件:圖5.7五、Activity

從Logcat控制臺上看,新的Activity已經啟動,而之前的Activity還處于可見狀態(tài),只是我們再去點擊按鈕已經沒有反應,也就是失焦。此時MainActivity處于暫停狀態(tài),OtherActivity處于運行狀態(tài)。

對生命周期做一個總結:Activity從創(chuàng)建到運行狀態(tài)所觸發(fā)的事件:onCreate()-onStart()-onResume();當Activity從運行狀態(tài)到停止狀態(tài)所觸發(fā)的事件:onPause()-onStop();當Activity從停止狀態(tài)到運行狀態(tài)所觸發(fā)的事件:onRestart()-onStart()-onResume();當Activity從運行狀態(tài)到暫停狀態(tài)所觸發(fā)的事件是:onPause();當Activity從暫停狀態(tài)到運行狀態(tài)所觸發(fā)的事件是:onResume()。

五、Activity

在很多項目中需要多個Activity,但是也有的項目只用到一個Activity。如果應用只有一個Activity,它的作用無非就是通過setContentView()方法載入不同的Layout實現頁面的跳轉。5.2Activity之間的跳轉5.2.1利用setContentView()實現頁面跳轉五、Activity1.創(chuàng)建項目新建一個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.創(chuàng)建項目新建另一個OtherActivity,并同時創(chuàng)建該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:請求碼,請求碼的值是根據業(yè)務需要由自已設定的,用于標識請求來源。例如:一個Activity有兩個按鈕,點擊這兩個按鈕都會打開同一個Activity,不管是哪個按鈕打開新Activity,當這個新Activity關閉后,系統(tǒng)都會調用前面Activity的onActivityResult(intrequestCode,intresultCode,Intentdata)方法。setResult(intresultCode,Intentintent)五、Activity

當通過startActivityForResult(Intentintent,intrequestCode)這一方法打開新的界面返回數據時,通過調用此方法,攜帶數據返回給上一組件。

參數1:resultCode結果碼。一個Activity可以通過startActivityForResult打開不同的Activity。當都需要數據返回時,通過此結果碼來區(qū)分是由哪一個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. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論