版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
目錄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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年版:融資租賃合同
- 2024年某商業(yè)大廈消防系統(tǒng)工程承包合同版B版
- 2025專利實施許可合同2
- 2025產品代加工合同范文
- 研發(fā)中心土地租賃合同鄉(xiāng)鎮(zhèn)
- 2025不動產贈與合同
- 食品加工廠設備維護
- 醫(yī)療器械銷售代表招聘協(xié)議
- 精密儀器批次管理辦法
- 河北省邢臺市2024屆高三上學期期末考試數學試題(解析版)
- 2014光伏發(fā)電站功率控制能力檢測技術規(guī)程
- 第15課 有創(chuàng)意的書(說課稿)2022-2023學年美術四年級上冊 人教版
- 2023年上海交通大學827材料科學基礎試題
- 信訪面試資料
- 焊接工藝評定轉化表
- 《報告文學研究》(07562)自考考試復習題庫(含答案)
- 拼多多運營合作合同范本
- 小學英語-module10 unit2 eat vegetables every day教學設計學情分析教材分析課后反思
- Unit3Timeschange!Period1Startingout教案-高中英語外研版選擇性
- 全國大學英語四、六級考試缺考申請表
- 美國特朗普-課件
評論
0/150
提交評論