Android按键响应的几种方式、安卓页面的跳转、页面跳转传参、页面自动跳转、Activity(页面)的生命周期
按鍵響應(yīng)的第一種方式:
- 在XML文件里面設(shè)置按鍵的onClick綁定函數(shù)。就像下面的代碼,給Button設(shè)置onClick屬性,在按鍵被按下的時(shí)候,會(huì)調(diào)用java文件里面的onClickbtton1這個(gè)函數(shù),因?yàn)楝F(xiàn)已將它和這個(gè)按鈕進(jìn)行了綁定。利用布局文件中的onClick屬性,并在實(shí)現(xiàn)文件中實(shí)現(xiàn)該方法。注意的是這里的方法名應(yīng)該和布局文件中onClick屬性的方法名相同,該方法必須是public方法。
- 下面是兩個(gè)通過兩個(gè)按鍵來調(diào)用綁定的函數(shù)的XML代碼:
- java代碼:
按鍵響應(yīng)的第二種方式:
關(guān)于監(jiān)聽器:監(jiān)聽器是一個(gè)存在于View類下的接口,一般以O(shè)n**Llistener命名,實(shí)現(xiàn)該接口需要復(fù)寫相應(yīng)的on(View v)方法(如onClick(View v))。Android提供的基于事件監(jiān)聽接口有OnClickListener、OnLongClickListener、OnFocusChangeListener、OnKeyListener、OnTouchListener、OnCreateContextMenuListener等。
- OnClickListener接口:該接口處理的是點(diǎn)擊事件。在觸摸模式下,是在某個(gè)View上按下并抬起的組合動(dòng)作,而在鍵盤模式下,是某個(gè)View獲得焦點(diǎn)后點(diǎn)擊確定鍵或者按下軌跡球事件。
- OnLongClickListener接口: OnLongClickListener接口與上述的OnClickListener接口原理基本相同,只是該接口為View長按事件的捕捉接口,即當(dāng)長時(shí)間按下某個(gè)View時(shí)觸發(fā)的事件。
- OnFocusChangeListener接口:OnFocusChangeListener接口用來處理控件焦點(diǎn)發(fā)生改變的事件。如果注冊了該接口,當(dāng)某個(gè)控件失去焦點(diǎn)或者獲得焦點(diǎn)時(shí)都會(huì)觸發(fā)該接口中的回調(diào)方法。
- OnKeyListener接口:是對手機(jī)鍵盤進(jìn)行監(jiān)聽的接口,通過對某個(gè)View注冊并監(jiān)聽,當(dāng)View獲得焦點(diǎn)并有鍵盤事件時(shí),便會(huì)觸發(fā)該接口中的回調(diào)方法。
- OnTouchListener接口:是用來處理手機(jī)屏幕事件的監(jiān)聽接口,當(dāng)為View的范圍內(nèi)觸摸按下、抬起或滑動(dòng)等動(dòng)作時(shí)都會(huì)觸發(fā)該事件。
- OnCreateContextMenuListener接口:是用來處理上下文菜單顯示事件的監(jiān)聽接口。該方法是定義和注冊上下文菜單的另一種方式。
實(shí)現(xiàn)監(jiān)聽的兩種方法:
方法一:在Activity中定義一個(gè)內(nèi)部類繼承監(jiān)聽器接口(這里是OnClickListener)。常見的繼承方法如下:
class MyListener implements View.OnClickListener{@Overridepublic void onClick(View v) {Toast.makeText(MainActivity.this,"you have clicked Button2",Toast.LENGTH_SHORT).show();}OnClickListener接口的使用(XML文件只需要為控件設(shè)置ID即可,不用綁定函數(shù),需要在java文件中將XML文件中的按鍵和java代碼通過findViewById關(guān)聯(lián)起來):
package com.fhn.buttonresponse; import android.app.Activity; import android.os.Bundle; import android.view.View; import android.widget.Button;首先應(yīng)該實(shí)現(xiàn)接口類,再類中實(shí)現(xiàn)onClick方法,實(shí)現(xiàn)業(yè)務(wù)代碼。class Myclick implements View.OnClickListener //繼承View的OnClickListener這個(gè)方法 {@Overridepublic void onClick(View v) {int id=v.getId();switch(id){case R.id.btn1:System.out.println("按鍵一被按下");System.out.println(id);//Toast.makeText(this, "按鍵一",0).show(); //this指代當(dāng)前類,按鍵一指示要顯示的內(nèi)容,第三個(gè)參數(shù)表示要顯示的時(shí)長0表示默認(rèn)時(shí)長//makeText是一個(gè)構(gòu)造方法,它最終會(huì)產(chǎn)生一個(gè)對象,通過.show來調(diào)用對象的方法break;case R.id.btn2:System.out.println("按鍵二被按下");System.out.println(id);//Toast.makeText(this, "按鍵二", 0).show();break;default: break;} } } public class MainActivity extends Activity {Button btu1;Button btu2;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);btu1 =(Button)findViewById(R.id.btn1);//將java文件里面的btu1和XML文件里面的btn1相關(guān)聯(lián)btu2 =(Button)findViewById(R.id.btn2);//將java文件里面的btu2和XML文件里面的btn2相關(guān)聯(lián)btu1.setOnClickListener(new Myclick());btu2.setOnClickListener(new Myclick());} }方法二:實(shí)現(xiàn)匿名內(nèi)部類。這種方法適合只希望對監(jiān)聽器進(jìn)行一次性使用的情況,在該代碼塊運(yùn)行完畢之后,該監(jiān)聽器也就不復(fù)存在了。
bt1.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {Toast.makeText(MainActivity.this,"you have clicked Button1",Toast.LENGTH_SHORT).show();}});使用匿名內(nèi)部類的方式創(chuàng)建監(jiān)聽器:
package com.fhn.buttonresponse; import android.app.Activity; import android.os.Bundle; import android.view.View; import android.widget.Button;public class MainActivity extends Activity {Button btu1;Button btu2;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);btu1 =(Button)findViewById(R.id.btn1);//將java文件里面的btu1和XML文件里面的btn1相關(guān)聯(lián)btu2 =(Button)findViewById(R.id.btn2);//將java文件里面的btu2和XML文件里面的btn2相關(guān)聯(lián)btu1.setOnClickListener(new View.OnClickListener(){@Overridepublic void onClick(View v) { //new View.OnClickListener(){}相當(dāng)于new了一個(gè)匿名內(nèi)部類,然后還要實(shí)現(xiàn)內(nèi)部類的接口onClick// TODO Auto-generated method stubSystem.out.println("按鍵一被按下");System.out.println(v.getId());Toast.makeText(MainActivity.this, "按鍵一", 0).show();} });btu2.setOnClickListener(new View.OnClickListener(){@Overridepublic void onClick(View v) {// TODO Auto-generated method stubSystem.out.println("按鍵二被按下");System.out.println(v.getId());Toast.makeText(MainActivity.this, "按鍵二", 0).show();}});} }按鍵響應(yīng)第三種方式(為整個(gè)Activity設(shè)置監(jiān)聽器):
package com.fhn.buttonresponse; import android.app.Activity; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.Toast;public class MainActivity extends Activity implements View.OnClickListener { //MainActivity繼承View.OnClickListener//這個(gè)接口,說明這個(gè)頁面具有監(jiān)聽按鍵的功能Button btu1;Button btu2;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);btu1 =(Button)findViewById(R.id.btn1);//將java文件里面的btu1和XML文件里面的btn1相關(guān)聯(lián)btu2 =(Button)findViewById(R.id.btn2);//將java文件里面的btu2和XML文件里面的btn2相關(guān)聯(lián)btu1.setOnClickListener(this); //將MainActivity這個(gè)類有的按鍵監(jiān)聽到功能設(shè)置給btu1btu2.setOnClickListener(this);//將MainActivity這個(gè)類有的按鍵監(jiān)聽到功能設(shè)置給btu2}@Overridepublic void onClick(View v) { //按鍵被按下后執(zhí)行這個(gè)函數(shù)int id=v.getId();switch(id){case R.id.btn1:System.out.println("按鍵一被按下");System.out.println(id);Toast.makeText(this, "按鍵一",0).show(); //this指代當(dāng)前類,按鍵一指示要顯示的內(nèi)容,第三個(gè)參數(shù)表示要顯示的時(shí)長0表示默認(rèn)時(shí)長//makeText是一個(gè)構(gòu)造方法,它最終會(huì)產(chǎn)生一個(gè)對象,通過.show來調(diào)用對象的方法break;case R.id.btn2:System.out.println("按鍵二被按下");System.out.println(id);Toast.makeText(this, "按鍵二", 0).show();break;default: break;} } }安卓頁面的跳轉(zhuǎn):
- 為安卓添加一個(gè)新的界面,新建完成后可以看到Manifest.xml下面會(huì)新注冊一個(gè)界面。
頁面跳轉(zhuǎn)(可以通過綁定函數(shù)加Intent實(shí)現(xiàn)):
就是在綁定函數(shù)里面添加Intent,新建Intent對象然后設(shè)置上下文(當(dāng)前界面)和將要跳轉(zhuǎn)界面的類。然后使用startActivity方法實(shí)現(xiàn)跳轉(zhuǎn)。
- 第一個(gè)界面的JAVA代碼:
- 第二個(gè)文件的JAVA代碼:
- 第三個(gè)界面的JAVA代碼:
以整個(gè)Activity監(jiān)聽的方式實(shí)現(xiàn)界面跳轉(zhuǎn)(以下代碼能夠?qū)崿F(xiàn)由界面1到2,2到3,3到1):
- 第一個(gè)界面代碼:
- 第二個(gè)界面代碼:
- 第三個(gè)界面代碼:
頁面跳轉(zhuǎn)如何傳參(整型或者字符串——putExtra):
第一個(gè)界面向第二個(gè)界面?zhèn)鲄?#xff08;整數(shù)1),第二個(gè)界面向第三個(gè)界面?zhèn)鲄?#xff08;字符串sting),第三個(gè)界面向第一個(gè)界面?zhèn)鲄?#xff08;字符串string2)
- MainActivity的代碼(第一個(gè)界面):
- SecondActivity文件代碼:
- ThirdActivity文件代碼:
使用Bundle的方式實(shí)現(xiàn)界面的數(shù)據(jù)傳輸:
- MainActivity文件代碼:
- SecondActivity文件代碼:
安卓界面實(shí)現(xiàn)自動(dòng)跳轉(zhuǎn):
當(dāng)使用Thread.sleep();這個(gè)線程延時(shí)函數(shù)的時(shí)候,會(huì)出現(xiàn)第一個(gè)界面無法顯示的問題,因?yàn)樵谝粋€(gè)APP啟動(dòng)的時(shí)候會(huì)有一個(gè)主要的UI線程,而這個(gè)sleep實(shí)在當(dāng)前的UI線程去做了阻塞的,UI顯示會(huì)不斷的刷新屏幕界面,而這時(shí)候sleep就是在刷新屏幕界面的時(shí)候阻塞,所以會(huì)造成界面出不來(無法看到界面的任何字符)。既然要實(shí)現(xiàn)界面的自動(dòng)跳轉(zhuǎn)就一定要用到sleep但是不能在當(dāng)前線程,要在一個(gè)新的線程里面去sleep,啟動(dòng)另外一個(gè)線程,在新的線程里面sleep后顯示一個(gè)新的界面。
使用java開辟線程:Thread t=new Thread(); //實(shí)例化了一個(gè)線程,但是沒有啟動(dòng)線程 t.start(); //這時(shí)候才啟動(dòng)了線程但是這樣并不知道你要在新的線程里面干什么,所以要要實(shí)例化的時(shí)候,添加參數(shù):Thread t=new Thread(new Runnable() {@Overridepublic void run() {// TODO Auto-generated method stub}}); Runnable是一個(gè)接口,你需要重寫里面的run方法(run方法里面就是寫的你真正要干的工作)- 實(shí)現(xiàn)運(yùn)行APP3S后從第一界面跳轉(zhuǎn)到第二界面
Activity的生命周期:
相信不少朋友也已經(jīng)看過這個(gè)流程圖了,也基本了解了Activity生命周期的幾個(gè)過程,我們就來說一說這幾個(gè)過程。
- 啟動(dòng)Activity:系統(tǒng)會(huì)先調(diào)用onCreate方法,然后調(diào)用onStart方法,最后調(diào)用onResume,Activity進(jìn)入運(yùn)行狀態(tài)。
- 當(dāng)前Activity被其他Activity覆蓋其上或被鎖屏:系統(tǒng)會(huì)調(diào)用onPause方法,暫停當(dāng)前Activity的執(zhí)行。
- 當(dāng)前Activity由被覆蓋狀態(tài)回到前臺或解鎖屏:系統(tǒng)會(huì)調(diào)用onResume方法,再次進(jìn)入運(yùn)行狀態(tài)。
- 當(dāng)前Activity轉(zhuǎn)到新的Activity界面或按Home鍵回到主屏,自身退居后臺:系統(tǒng)會(huì)先調(diào)用onPause方法,然后調(diào)用onStop方法,進(jìn)入停滯狀態(tài)。
- 用戶后退回到此Activity:系統(tǒng)會(huì)先調(diào)用onRestart方法,然后調(diào)用onStart方法,最后調(diào)用onResume方法,再次進(jìn)入運(yùn)行狀態(tài)。
- 當(dāng)前Activity處于被覆蓋狀態(tài)或者后臺不可見狀態(tài),即第2步和第4步,系統(tǒng)內(nèi)存不足,殺死當(dāng)前Activity,而后用戶退回當(dāng)前Activity:再次調(diào)用onCreate方法、onStart方法、onResume方法,進(jìn)入運(yùn)行狀態(tài)。
- 用戶退出當(dāng)前Activity,系統(tǒng)先調(diào)用onPause方法,然后調(diào)用onStop方法,最后調(diào)用onDestory方法,結(jié)束當(dāng)前Activity。
總結(jié)
以上是生活随笔為你收集整理的Android按键响应的几种方式、安卓页面的跳转、页面跳转传参、页面自动跳转、Activity(页面)的生命周期的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 第十九期:CIO不懂老板数字化转型的目的
- 下一篇: mongo:(3)windows上mon