1. 程式人生 > >Android活動(Activity)

Android活動(Activity)

一直在學習郭霖老師的《第一行程式碼》,我整理了第二章的筆記。安卓的activity是安卓的四大元件之首,重要性不言而喻。下面的內容都是很基礎的。

目錄

首先,沒有在AndroidManifest.xml裡面註冊的活動是不可以使用的,但是AS會幫助你自己註冊(前提是你新建的是活動而不是Java類)。你只需要在此xml中宣告主活動即可。宣告主活動的語句應該也是死的。(AS強大的提示功能)

所有的活動都必須繼承Activity類或者是它的子類,然後才能有活動的特性。活動必須重寫onCreate()方法,這個方法是一個活動被建立時必須執行的,重寫的格式固定。

Super.onCreate(savedInstanceState);//(AS自動寫出了)

安卓的設計講究邏輯和檢視分離,因此不推薦在活動中直接編寫介面。通用做法是在佈局(layout)中編寫介面,然後在活動中將它引用過來。引入佈局是setContentView(id),同理,如果你在建立活動時勾選了Generate LayoutFile,那麼會自動引入。

佈局檔案都在res/layout目錄下。

一般把所有的圖片放在drawable-xxhdpi資料夾 

當使用AS建立專案時,如果選用AddNoActivity,並且再建立活動的時候不勾選GenerateLayout,那麼專案中並不包含layout資料夾的,需要手工建立。

引用id的時候使用@id/idname,而制定id則@+id/id_name

安卓中match_parent表示和父元素相等,而wrap_content表示當前元素只要剛好能包含裡面的內容即可。

 在活動中新增Toast標籤

首先在Activity中例項化layout資料夾內的檔案中的Button

Button button1=(Button)findViewById(R.id.button_1);

這裡我認為R檔案中,普通元素的id引用都是這樣的,而檔案的引用則是R.資料夾名.檔名

例項化之後要為這個button1新增監聽器。

button1.setOnClickListener(new View.OnClickListener()

AS會自動重寫onClick

方法,在這個方法中宣告Toast即可。

Toast.makeText(在哪個活動介面活動(上下文),要彈出的內容,彈出的時間長短).show();

//上下文建議 當前類名.this

在活動中使用Menu

1.在res資料夾中建立menu目錄,隨後在其中新建Menu resource file。(必須是menu目錄,否則找不到相關的file。)

 2.在這個file中建立選單項格式為

<item android:id=”@+id/idname”

            android :title=”name” />

3.在活動中重寫OnCreateOptionsMenu()方法,Ctrl+O快捷鍵。在方法中,新增getMenuInflater().inflate(,);期間的引數為file的id,以及預設的menu引數 ,return true;

4.重寫onOptionsItemSelected()方法,裡面用switch(item.getItemId())來表示選中的按鍵。return true;

活動的銷燬:

      一般情況下,back按鍵即可銷燬活動;或者listener新增finish()即可銷燬當前活動。

活動中的穿梭

      從主活動跳轉到其他活動需要Intent。有顯式Intent和隱式Intent之分。

先來看顯式Intent:

      首先需要在com的那個包裡建立一個新的Activity,這次讓他幫忙生成佈局layout檔案,AS在對應的Acticity中也自動匯入了這個佈局檔案。

      我們需要做的是從主活動跳轉到新活動中來,很明顯主活動只有一個button可以使用。

Intent intent =new Intent(pageContext(所處檔名.this),新java.class);

startActivity(intent);//啟動這個Intent物件即可

      顯式的Intent很簡單,接下來看隱式Intent,官方推薦隱式Intent?

隱式Intent不僅可以啟動自己程式的活動,還可以啟動其他程式的活動,這使得不同程式之間共享功能成了可能。

      隱式Intent的宣告

Intent intent=new Intent(Intent.ACTION…)

Intent.setData(Uri.parse(“內容”))

StartActivity(intent);

隱式宣告相當於告訴系統我需要一個明確特性的程式,系統提供所有滿足要求的程式以供選擇。程式可以提供的特性在AndroidMainifest中的<intent-filter>標籤中提供。

Intent還可以用來傳遞資料,介面之間的聯絡靠的就是Intent。

  1. 向下一個活動傳遞資料。

在button中按規定宣告Intent,隨後宣告一個字串。

Intent的物件.putExtra(“代號”,字串變數);

startActivity(intent);

另一個活動接受字串,首先宣告Intent

Intent intent=getIntent();

String data=intent.getStringExtra(“代號”);

注意:1.宣告的屬性與要接受的屬性有關,你必須知道要接受的型別,方法有getIntExtra,getStringExtra等等。

2.返回資料給上一個活動。

返回上一個活動只需要按一下返回鍵就可以了,但是Android還是提供了一個startActivityForResult()的啟動方法來在活動銷燬的時候能返回一個結果給上一個活動。

   過程:首先正常宣告intent,然後啟動時用startActivityForResult(intent,特殊數值)來啟動下一個活動。

    下一個活動再

Intent intent=new Intent();

String  data="Me Too";

intent.putExtra("data_return",data);

setResult(RESULT_OK,intent);

finish();

然後回到上一級活動,因為我們啟動下一個活動用的是startActivityForResult方法,所以當下一個活動銷燬之後,上一級頁面需要重寫onActivityResult方法。

      這個方法有三個引數,requestCod方法是那個特殊值,resultCode是返回值(RESULT_OK),第三個是資料值。

在方法中    

switch (requestCode)

        {

            case 1:

                if (resultCode==RESULT_OK)//注意這裡的變數

                {

                    String returndata=data.getStringExtra("data_return");

                    Toast.makeText(this,returndata,Toast.LENGTH_SHORT).show();

                }

                break;

                default:

        }

安卓的返回鍵的方法是onBackPressed(),可以在活動中重寫這個方法來達到目的!

活動的生命週期

活動的啟動模式

Android一共有4種啟動模式,standard,singleTop,singleTask,和singleInstance。可以通過在AndroidManifest.xml中通過給activity標籤指定android:launchMode來選擇啟動模式。

1.standard

程式預設的是Standard啟動方式,特點就是指哪打哪,不管有沒有。

2..singleTop

特點是如果活動在棧頂,那麼在又一次創造本活動時,不會創造。

3.singleTask

特點是每次啟動該活動時,系統首先會在返回棧中檢查是否存在該活動的例項,如果發現已經存在則直接使用該例項,並把這個活動之上的活動統統出棧。

4.singleInstance

特點是宣告為該模式的活動,系統會把他分到另外的一個單獨的棧中。