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.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。
-
向下一個活動傳遞資料。
在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
特點是宣告為該模式的活動,系統會把他分到另外的一個單獨的棧中。