20161105第一行代碼第二章Activity

一民珍、創(chuàng)建Activity步驟:

二襟士、采用Intent切換activity?

1盗飒、顯式Intent?

2、隱式Intent?

3陋桂、隱式Intent的其他用法?

三逆趣、Intent傳遞數(shù)據(jù)?

1、向下一個activity傳遞數(shù)據(jù)?

2章喉、返回數(shù)據(jù)給上一個activity?

四汗贫、activity的生命周期?

1、活動狀態(tài)?

2秸脱、activity生存期?

3落包、activity被回收數(shù)據(jù)保存?

五、activity的啟動模式?

六摊唇、activity最佳實踐?

1咐蝇、知道當前頁面是哪一個activity?

2、隨時隨地退出程序?

3巷查、給每個activity都添加一個合適的啟動方法?

等級:小菜鳥有序,經(jīng)驗值+600;

書簽:從看得見的開始岛请,開始探討活動旭寿。

輸出:了解Activity


正文:

第二章Activity

Activity是包含用戶界面的組件,用于和用戶進行交互崇败。

一盅称、創(chuàng)建Activity步驟:

1、首先后室,創(chuàng)建沒有Activity的application缩膝,發(fā)現(xiàn)src文件夾是空的。手動創(chuàng)建一個包com.example.demo1activity岸霹,在包中添加一個class疾层,MainActivity.java。

要使用activity贡避,extents Activity痛黎。此時,重寫Activity的onCreate()方法刮吧。

2舅逸、此時,只有activity皇筛,用戶是不可見的琉历。因此,需要在上面添加layout和view。在res-->layout中添加一個Android XML file旗笔,可以在該xml文件中創(chuàng)建布局彪置。添加諸如TextView/Button等常用控件。

3蝇恶、此時拳魁,需要將創(chuàng)建的layout文件加載到activity中,在第一步創(chuàng)建的MainActivity中onCreate()方法中撮弧,使用setContentView(R.layout.myactivity)將布局加載進來潘懊。

4、所有四大組件的使用贿衍,都需要在AndroidManifest.xml文件中注冊授舟。

注冊方法為:

在中添加標簽,將需要注冊的activity使用android:name=".MainActivity"注冊贸辈。如果是主activity释树,即打開application時看到的activity,則需要添加

總體注冊代碼為:

android:name=".MainActivity"

android:label="My App">

5擎淤、銷毀activity

finish();


二奢啥、采用Intent切換activity

1、顯式Intent

首先嘴拢,按照上面的步驟重新創(chuàng)建一個SecondActivity(記得注冊)桩盲,采用Intent實現(xiàn)跳轉(zhuǎn)

Intent intent = new Intent(MainActivity.this, SecondActivity.class);

startActivity(intent);

2、隱式Intent

隱式Intent并不能實現(xiàn)直接跳轉(zhuǎn)席吴,需要指定兩個條件(intent-filter):action和category正驻。

如果在intent-filter中指定category為default的category,即android.intent.category.DEFAULT抢腐,則只需滿足action條件即可。

intent-filter在注冊activity時添加襟交,注冊方法如下:

跳轉(zhuǎn)方法為:

Intent intent=new Intent("com.example.demo1activity.SECOND_START");

startActivity(intent);

intentfilter中只能有一個action迈倍,但可以有多個category,滿足其中一個category即可捣域。


3啼染、隱式Intent的其他用法

使用隱式intent,不但可以打開自己編寫的activity焕梅,還可以打開系統(tǒng)編寫的activity迹鹅,比如瀏覽器,打電話等贞言。

打開瀏覽器:

Intent intent=new Intent(Intent.ACTION_VIEW);

intent.setData(Uri.parse("http://www.baidu.com"));

startActivity(intent);

解釋:

Intent.ACTION_VIEW是系統(tǒng)內(nèi)置的動作斜棚,打開瀏覽器;

setData()將一個Uri對象傳入intent,用于指定該intent正在操作的數(shù)據(jù)弟蚀,這些數(shù)據(jù)都是用Uri.parse()將字符串轉(zhuǎn)換為Uri產(chǎn)生的蚤霞。

在intent-filter中,添加標簽义钉,用于精確指定該activity能響應(yīng)的數(shù)據(jù)類型昧绣,包括

android:scheme用于指定數(shù)據(jù)的協(xié)議部分,比如http捶闸。

該方法還可以打電話夜畴、顯示地理位置等。



三删壮、Intent傳遞數(shù)據(jù)

1贪绘、向下一個activity傳遞數(shù)據(jù)

在頭一個activity中,使用putExtra()將數(shù)據(jù)傳入intent

在下一個activity中醉锅,使用getIntent()獲得傳遞來的intent兔簇,然后使用getStringExtra()獲得傳遞來的數(shù)據(jù)。

2硬耍、返回數(shù)據(jù)給上一個activity

在上一個activity中垄琐,不采用startActivity(),而采用startActivityForResult(intent, 1)经柴。其中狸窘,1為requestCode,用于之后判斷是不是自己發(fā)送出去的intent坯认。

在下一個activity中翻擒,建立新的intent,然后將data利用intent.putExtra()放入intent牛哺,

setResult(RESULT_OK, intent)放置result陋气,其中RESULT_OK為resultcode,用于在上一個activity中分辨是哪一個activity返回的數(shù)據(jù)引润。最后巩趁,finish()。

之后淳附,在上一個activity中议慰,重寫onActivityResult()方法。

同樣的奴曙,如果在第二個activity中别凹,是按返回鍵返回的,可以在第二個activity中洽糟,重寫onBackPressed()方法返回數(shù)據(jù)炉菲,方法同上堕战。


四、activity的生命周期

1颁督、活動狀態(tài)

運行狀態(tài):在棧頂時

暫停狀態(tài):不可操作践啄,但可見

停止狀態(tài):完全不可見

銷毀狀態(tài):從棧中被移除

2、activity生存期

完整生存期:onCreate() onDestory()

可見生存期:onStart() onStop()

前臺生存期:onResume() onPause()

3沉御、activity被回收數(shù)據(jù)保存

activity中提供了一個onSaveInstanceState()的方法屿讽,該方法會攜帶一個bundle類型參數(shù),bundle可以保存各種信息吠裆。

protected void onSaveInstanceState(Bundle outState) {

super.onSaveInstanceState(outState);

String savedata="hello you";

outState.putString("saved", savedata);

}

如何恢復(fù)數(shù)據(jù)呢伐谈?

在onCreate()方法中,傳入的參數(shù)為Bundle savedInstanceState试疙,利用這恢復(fù)數(shù)據(jù)诵棵。

String data=savedInstanceState.getString(“saved”);

五、activity的啟動模式

四種啟動模式祝旷,可以在標簽中android:launchMode定義履澳。

standard:打開activity,就放入棧頂

singleTop:打開activity怀跛,檢查棧頂是否已經(jīng)存在該activity距贷,存在了就不創(chuàng)建。不存在才創(chuàng)建吻谋。不過忠蝗,如果該activity不在棧頂,但也存在漓拾,則也會重新創(chuàng)建一個阁最。

singleTask:檢查整個返回棧,如果存在某個activity骇两,則不會重新創(chuàng)建速种。

singleInstance:創(chuàng)建一個activity,重新在一個新的返回棧(或Task)中創(chuàng)建低千,該activity與其他activity不在同一個Task中配阵,其他程序也可以調(diào)用這個activity的實例。

六栋操、activity最佳實踐

1、知道當前頁面是哪一個activity

新建一個BaseActivity extents Activity饱亮,其中在onCreate()中打印該activity的信息

Log.i(“BaseActivity”,getClass().getSimpleName()); ??//獲得類名

然后矾芙,所有activity都extents BaseActivity即可

2、隨時隨地退出程序

當打開很多activity之后近上,退出程序需要一直按Back剔宪,很麻煩。

首先,新建一個activity管理類葱绒,實現(xiàn)所有的activity的添加感帅、刪除和finish()。

public class ActivityCollector {

public static List activities=new ArrayList();

public static void addActivity(Activity activity)

{

activities.add(activity);

}

public static void removeActivity(Activity activity)

{

activities.remove(activity);

}

public static void finishAll()

{

for(Activity activity:activities)

{

if(!activity.isFinishing())

{

activity.finish();

}

}

}

}

然后地淀,修改BaseActivity失球,在onCreate()中添加this,onDestory()中移除this

protected void onCreate(Bundle savedInstanceState) {

// TODO Auto-generated method stub

super.onCreate(savedInstanceState);

Log.i("BaseActivity", getClass().getSimpleName());

ActivityCollector.addActivity(this);

}

@Override

protected void onDestroy() {

// TODO Auto-generated method stub

super.onDestroy();

ActivityCollector.removeActivity(this);

}

3帮毁、給每個activity都添加一個合適的啟動方法

比如我需要啟動一個SecondActivity实苞,可是不知道該activity需要哪些參數(shù),怎么辦烈疚?

在SecondActivity中添加一個啟動自己的方法:

public class SecondActivity extends Activity

{

public static void startActivity(Context contex, String data1, String data2)

{

Intent intent = new Intent(context, SecondActicity.class);

intent.putExtra(“param1”, data1);

intent.putExtra(“param2”, data2);

startActivity(intent);

}

}

在SecondActivity中添加了startActivity()方法之后黔牵,在任意的activity中啟動SecondActivity,都可以調(diào)用該方法爷肝,而且知道需要傳入哪些參數(shù)猾浦。

比如在MainActivity中啟動方法為:

SecondActivity.startActivity(MainActivity.this, “data1”, “data2”);


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市灯抛,隨后出現(xiàn)的幾起案子金赦,更是在濱河造成了極大的恐慌,老刑警劉巖牧愁,帶你破解...
    沈念sama閱讀 211,123評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件素邪,死亡現(xiàn)場離奇詭異,居然都是意外死亡猪半,警方通過查閱死者的電腦和手機兔朦,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,031評論 2 384
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來磨确,“玉大人沽甥,你說我怎么就攤上這事》Π拢” “怎么了摆舟?”我有些...
    開封第一講書人閱讀 156,723評論 0 345
  • 文/不壞的土叔 我叫張陵,是天一觀的道長邓了。 經(jīng)常有香客問我恨诱,道長,這世上最難降的妖魔是什么骗炉? 我笑而不...
    開封第一講書人閱讀 56,357評論 1 283
  • 正文 為了忘掉前任照宝,我火速辦了婚禮,結(jié)果婚禮上句葵,老公的妹妹穿的比我還像新娘厕鹃。我一直安慰自己兢仰,他們只是感情好,可當我...
    茶點故事閱讀 65,412評論 5 384
  • 文/花漫 我一把揭開白布剂碴。 她就那樣靜靜地躺著把将,像睡著了一般。 火紅的嫁衣襯著肌膚如雪忆矛。 梳的紋絲不亂的頭發(fā)上察蹲,一...
    開封第一講書人閱讀 49,760評論 1 289
  • 那天,我揣著相機與錄音洪碳,去河邊找鬼递览。 笑死,一個胖子當著我的面吹牛瞳腌,可吹牛的內(nèi)容都是我干的绞铃。 我是一名探鬼主播,決...
    沈念sama閱讀 38,904評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼嫂侍,長吁一口氣:“原來是場噩夢啊……” “哼儿捧!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起挑宠,我...
    開封第一講書人閱讀 37,672評論 0 266
  • 序言:老撾萬榮一對情侶失蹤菲盾,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后各淀,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體懒鉴,經(jīng)...
    沈念sama閱讀 44,118評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,456評論 2 325
  • 正文 我和宋清朗相戀三年碎浇,在試婚紗的時候發(fā)現(xiàn)自己被綠了临谱。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,599評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡奴璃,死狀恐怖悉默,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情苟穆,我是刑警寧澤抄课,帶...
    沈念sama閱讀 34,264評論 4 328
  • 正文 年R本政府宣布,位于F島的核電站雳旅,受9級特大地震影響跟磨,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜攒盈,卻給世界環(huán)境...
    茶點故事閱讀 39,857評論 3 312
  • 文/蒙蒙 一抵拘、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧沦童,春花似錦仑濒、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,731評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至氏豌,卻和暖如春喉酌,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背泵喘。 一陣腳步聲響...
    開封第一講書人閱讀 31,956評論 1 264
  • 我被黑心中介騙來泰國打工泪电, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人纪铺。 一個月前我還...
    沈念sama閱讀 46,286評論 2 360
  • 正文 我出身青樓相速,卻偏偏與公主長得像,于是被迫代替她去往敵國和親鲜锚。 傳聞我的和親對象是個殘疾皇子突诬,可洞房花燭夜當晚...
    茶點故事閱讀 43,465評論 2 348

推薦閱讀更多精彩內(nèi)容