第二章 Activity

第二章 Activity

1.Android Activity 生命週期

什麼是Activity?

  • 從視覺效果來看:是一個活動窗口,是應用程序繪製的一個圖形界面,用於響應本窗口中的所有的事件--》JSP/HTML
  • 從應用程序來看,一個Activity就是一個單獨的屏幕,相當於是安卓程序和用戶交互的一個橋樑.-->XML+JAVA--->html/jsp+JS
  • 從外部看,Activity 就是一個圖形界面,通俗點說就是在android 的應用中所看到的用戶界面都是一個Activity或者說是Activity的表現
  • 從內部來看,Activity就是view 的容器,負責把放在其中的組件按照一定的組織進行表現和處理。 對於程序員來說,Activity就是一個java類一個入口,我們在裏面編寫相關的實現代碼 XML+JAVA

Activity的狀態

1.running:激活狀態
*Activity在屏幕顯示
*可以進行交互
2.Paused:暫停狀態
*Activity不能進行交互,暫時把屏幕顯示給其他的Activity
*例如:手機鎖屏了,這個Activity就被暫停了
3.Stop:停止狀態
*進入後臺不運行
*例如:按了home鍵,應用進入了後臺不運行
4.Destory:銷燬狀態
*應用被殺死了
*情況:用戶殺掉;Android系統自動殺死(設計到了進程的優先級問題);

在這裏插入圖片描述

官方解釋:

①Running:活躍的狀態,即在onResume()以後Activity處於前臺可視化,整個Activity最頂層的狀態,可以和用戶直接進行交流;
②Pause:暫停的狀態,當一個Activity被另一個新的非全屏的或者透明的Activity覆蓋時候,此時該Activity是去焦點,暫時失去了和用戶交流的能力,但是其狀態、變量等都還保留着。
③Stop:結束的狀態,當一個Activity被另一個全屏的非透明Activity完全覆蓋時候的狀態,此時該Activity已經不可見了,但是狀態還保留着。
④Destoryed:銷燬的狀態,當一個Activity被系統回收或者人爲關閉後的狀態,此時Activity已經關閉。

Android:XML+JAVA 類似於web開發裏面:HTML+JS

Activity的狀態的轉換

在這裏插入圖片描述

2.Android Log使用

log是什麼?

進行日誌處理的一個專門的類,日誌的處理便於開發者調試和維護。

在程序中輸出日誌, 使用 android.util.Log 類.
該類提供了若干靜態方法

android.util.Log
1.Log.v(String tag, String msg); 黑色 任意的信息都會輸出
2.Log.d(String tag, String msg); dubug 斷點
3.Log.i(String tag, String msg); 綠色 提示信息
4.Log.w(String tag, String msg); 橙色 警告信息
5.Log.e(String tag, String msg); 紅色 錯誤信息

分別對應 Verbose(冗長), Debug, Info, Warning,Error.

tag是一個標識,可以是任意字符串,通常可以使用類名+方法名, 主要是用來在查看日誌時提供一個篩選條件.
在這裏插入圖片描述

在MainActivity.java文件中寫入onStart(),onResume(),onStop()方法,並且寫一段

Log.v(“mainActivity”, “執行onResume方法”);

代碼,這個時候可以在logcat框中看到日誌記錄.如果太多了日誌記錄,可以創建一個過濾器,過濾器的包名應該與應用的包名一致.
在這裏插入圖片描述

3.Android EditText常規操作

1)EditText,TextView,Button之間的關係

EditText輸入框,TextView文本信息,Button按鈕
在這裏插入圖片描述

2)EditText的相關屬性

activity的屬性在activity_mian.aml文件中設置,Outline面板中可以設置屬性

TextView的基本屬性:有Id,Layout Parameters,Text,Hint,Input Type,Content Description,TextView(因爲EditText繼承了TextView),View(View),Deprecated.子類繼承父類的屬性,+特殊的屬性.
在這裏插入圖片描述

Id是命名,注意不能有重複
在這裏插入圖片描述

Layout Parameter(佈局)中,的width和height有wrap_content(跟內容相同,內容有多大就有多大),fill_parent(填充內容),match_parent(跟父屬性相同)三個屬性.
在這裏插入圖片描述

Text是內容.
在這裏插入圖片描述

Hint是提示信息.
在這裏插入圖片描述

Input Type是輸入內容的值的類型,即輸入框中彈出的鍵盤類型.
在這裏插入圖片描述

4大部分屬性:
*自己的屬性
*繼承來的
*layout parameter
*Drepcate--廢棄的屬性

4)常用操作:

  • 獲取對象
  • 設置值
  • 獲取值

在MainActivit.java文件的onstart()方法中編寫以下代碼,獲取對象,設置值,獲取值:

  // 獲取對象
  // 所有開發的組件的id,都是在R類裏面
  // R.id.xxx
  EditText username = (EditText) findViewById(R.id.main_username);
  EditText password = (EditText) findViewById(R.id.main_password);
  // 設置值
  username.setText("用戶名");
  password.setText("123456");
  // 獲取值
  	String passwordStr = password.getText().toString();
  	String usernameStr = username.getText().toString();
  
  	Log.v("mainActivity", "passwordStr的值爲" + passwordStr + "usernameStr的值爲:" + usernameStr);

則在應用的編輯欄中會顯示我在代碼中編寫password和username,在日誌文件中也會顯示
在這裏插入圖片描述

4.Android點擊事件實現的邏輯

三種方式:

1)在屬性裏面直接配置onclick屬性-指定方法

給登入按鈕綁定了Login的方法,然後再在MainActivity.java中創建一個login方法
在這裏插入圖片描述

login方法:

/*
1.把方法的修飾改成public
2.方法的參數一定要放一個View對象
*/
public void login(View v) {
// 獲取對象
// 所有開發的組件的id,都是在R類裏面
// R.id.xxx
EditText username = (EditText) findViewById(R.id.main_username);
EditText password = (EditText) findViewById(R.id.main_password);
// 設置值
username.setText(“用戶名”);
password.setText(“123456”);
// 獲取值
String passwordStr = password.getText().toString();
String usernameStr = username.getText().toString();
}

2)給按鈕綁定事件

在onCreate方法中給按鈕loginB綁定一個View.onClickListener的匿名內部類,並且創建一個onClick()方法.

// 所有Activity第一個執行的方法
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 寫一段日誌執行
Log.v(“mainActivity”, “執行oncreate方法”);
Button loginB = (Button) findViewById(R.id.button);
// 給按鈕綁定一個點擊事件
loginB.setOnClickListener(new View.OnClickListener() {

@Override
public void onClick(View v) {
// R.id.xxx
EditText username = (EditText) findViewById(R.id.main_username);
EditText password = (EditText) findViewById(R.id.main_password);
// 設置值
username.setText(“用戶名”);
password.setText(“123456”);
// 獲取值
String passwordStr = password.getText().toString();
String usernameStr = username.getText().toString();
}
});

}

3)activity實現事件的接口

第一步:實現OnClickListener接口,就會產生一個onclick()方法

public class MainActivity extends Activity implements OnClickListener

第二步:在oncreate中爲按鈕綁定鼠標點擊事件

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 寫一段日誌執行
Log.v(“mainActivity”, “執行oncreate方法”);
//獲取button按鈕控件
Button loginButton = (Button) findViewById(R.id.button);
//爲按鈕綁定一個點擊事件
loginButton.setOnClickListener(MainActivity.this);
}

第三步:編寫onclick方法,如果鼠標點擊了按鈕,則會執行onclick中的方法

  @Override
  public void onClick(View v) {
  }

但是實現了一個OnclickListener接口,只會生成一個onclick方法,如果有多個button按鈕的時候怎麼辦呢?

如果有多個按鈕需要綁定事件的時候,根據按鈕的id識別是哪個按鈕,然後再給他綁定相應的事件

代碼如下:

@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.button:
Log.v(“mainActivity”,“進入監聽事件-自己”);
//獲取編輯框
EditText username = (EditText) findViewById(R.id.main_username);
EditText password = (EditText) findViewById(R.id.main_password);
//給編輯框設置值
username.setText(“用戶名”);
password.setText(“123456”);
// 獲取值
String passwordStr = password.getText().toString();
String usernameStr = username.getText().toString();
break;
default:
break;
}

5.Android 傳值方式

登入界面–>點擊登入按鈕–>跳轉到主頁面,在主頁面顯示用戶名,密碼.

步驟:

1.登入界面–已經有了

2.主頁面

3.登錄頁面點擊的時候,獲取輸入的用戶名,密碼,傳值給主頁面

4.主頁面獲取登入頁面傳入的值.

開發主頁面步驟:

1)創建一個activity.mxl
在這裏插入圖片描述

設置activity名字,首字母必須大寫
在這裏插入圖片描述

2)設置home頁面的相關屬性
在這裏插入圖片描述

傳值方式有以下四種:

(1)intent傳值

使用intent傳值在傳遞方一共要3步

  1. 創建意圖
  2. 向意圖中存入要傳遞的值
  3. 啓動意圖
**在MainActivity中寫以下代碼:**

@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.button:
Log.v(“mainActivity”,“進入監聽事件-自己”);
//獲取編輯框
EditText username = (EditText) findViewById(R.id.main_username);
EditText password = (EditText) findViewById(R.id.main_password);
//給編輯框設置值
username.setText(“用戶名”);
password.setText(“123456”);
// 獲取值
String passwordStr = password.getText().toString();
String usernameStr = username.getText().toString();
//使用Intent傳遞值
//1.創建一個Intent,要指定class,第一個是我當前的位置,第二個是我要跳轉的位置.
Intent intent=new Intent(MainActivity.this,HomeActivity.class);
//2.存儲值進intent
intent.putExtra(“username”, usernameStr);
intent.putExtra(“password”, passwordStr);
//3.啓動意圖
startActivity(intent);

​ break;
default:
​ break;
}

}

接收方需要4步:

  1. 創建意圖,並獲取意圖
  2. 獲取意圖中的值
  3. 獲取控件
  4. 給控件設置你需要的值

在HomeActivity的onCreate中寫以下代碼:

//1.創建意圖,並且獲取意圖
Intent intent=getIntent();
//2.獲取意圖中的值
String username=intent.getStringExtra(“username”);
String password=intent.getStringExtra(“password”);
//3.獲取Home界面中的TextView控件
TextView name=(TextView) findViewById(R.id.home_username);
TextView pass=(TextView) findViewById(R.id.home_password);
//4.將獲取的值設置給TextView控件
name.setText(username);
pass.setText(password);

運行項目
在這裏插入圖片描述

(2)bundle傳值

bundel其實就是基於意圖的,使用bundle的方法就是將數據放到bundle中,然後再將bundle放到intent中

基本思路
在這裏插入圖片描述

MainActivity其他代碼不變,onClick(v)修改後代碼如下:

public void onClick(View v) {
switch (v.getId()) {
case R.id.button:
//如果點擊的按鈕的id爲button,則執行以下事件
Log.v(“mainActivity”, “進入監聽事件-自己”);
// 獲取編輯框
EditText username = (EditText) findViewById(R.id.main_username);
EditText password = (EditText) findViewById(R.id.main_password);
// 給編輯框設置值
username.setText(“用戶名”);
password.setText(“123456”);
// 獲取值
String passwordStr = password.getText().toString();
String usernameStr = username.getText().toString();
// 使用bundle傳遞值
// 1.創建一個Intent,要指定class,第一個是我當前的位置,第二個是我要跳轉的位置.
Intent intent = new Intent(MainActivity.this, HomeActivity.class);

​ //2.創建一個bundle
​ Bundle bundle=new Bundle();
​ //3.將所有的信息放到bundle中
​ bundle.putString(“username”, usernameStr);
​ bundle.putString(“password”, passwordStr);
​ //4.bundle是基於意圖的,將bundle放到意圖中
​ intent.putExtras(bundle);
​ //5.啓動意圖
​ startActivity(intent);

​ break;

​ default:
​ break;
​ }

}

HomeActivity中其他的代碼,onCreate方法中將之前用intent獲取值改爲用bundle獲取值

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_home);
//1.創建意圖,並且獲取意圖
Intent intent=getIntent();
//2.獲取bundle對象
Bundle Extras=intent.getExtras();
//3.獲取意圖中的值
String username=Extras.getString(“username”);
String password=Extras.getString(“password”);
//3.獲取Home界面中的TextView對象
TextView name=(TextView) findViewById(R.id.home_username);
TextView pass=(TextView) findViewById(R.id.home_password);
//4.將獲取的值設置給TextView控件
name.setText(username);
pass.setText(password);

}

運行結果一致!

(3)application傳值

**含義:**應用.

在web開發中把信息放到Application中,就是全局都可以獲取值.

**原理:**Activity向application裏面放入值.其他的任意的activity都可以獲取當前的application,從application裏面就可以取到放在裏面值.

應用場景:

1)相同的數據,很多的activity需要

2)一個數據需要從一個activity傳到另外一個,另外一個傳給第二個.
在這裏插入圖片描述

開發步驟:

第一步 :建立MyApplication 類 繼承Application ,建立私有屬性,建立getter setter 方法,*在清單文件中進行註冊,在Application標籤對中添加name屬性,屬性值爲 創建Application的包名加類名。*

1)創建Application類:
在這裏插入圖片描述

2)建立私有屬性:

public class MyApplication extends Application {
//用戶名
private String username;
//密碼
private String password;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}

3)在清單文件中註冊:
在這裏插入圖片描述

**第二步:**MyApplication application= (MyApplication) getApplication(); //在主頁面中接收application,對application的屬性進行賦值。 application.setNum1();

在MainActivity中的onclick方法中,將信息存入Application中

@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.button:
//如果點擊的按鈕的id爲button,則執行以下事件
Log.v(“mainActivity”, “進入監聽事件-自己”);
// 獲取編輯框
EditText username = (EditText) findViewById(R.id.main_username);
EditText password = (EditText) findViewById(R.id.main_password);
// 給編輯框設置值
username.setText(“用戶名”);
password.setText(“123456”);
// 獲取值
String passwordStr = password.getText().toString();
String usernameStr = username.getText().toString();
//1.創建一個Intent,要指定class,第一個是我當前的位置,第二個是我要跳轉的位置.
Intent intent = new Intent(MainActivity.this, HomeActivity.class);
//2.創建一個Application對象
MyApplication myApplication=(MyApplication) getApplication();
//3.將信息存入Application中
myApplication.setUsername(usernameStr);
myApplication.setPassword(passwordStr);
break;
default:
break;
}
}

**第三步:**在onclick方法中創建意圖對象Intent ,啓動意圖對象所對應的頁面

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

startActivity(intent);

第四步: 在接收頁面獲取application對象 然後取值之後展示到在相應的顯示控件當中

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_home);
//1.創建意圖,並且獲取意圖
Intent intent=getIntent();
//2.獲取意圖中的值
//String username=intent.getStringExtra(“username”);
//String password=intent.getStringExtra(“password”);

//獲取當前的應用
MyApplication myApplication=(MyApplication) getApplication();
//獲取Application中的值
String username=myApplication.getUsername();
String password=myApplication.getPassword();
//3.獲取Home界面中的TextView對象
TextView name=(TextView) findViewById(R.id.home_username);
TextView pass=(TextView) findViewById(R.id.home_password);
//4.將獲取的值設置給TextView控件
name.setText(username);
pass.setText(password);

}

運行結果與意圖傳值一致!

(4)數據回傳

數據回傳邏輯:
在這裏插入圖片描述

代碼:

在MainActivity中的onclick中寫入以下代碼:

@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.button:
//如果點擊的按鈕的id爲button,則執行以下事件
Log.v(“mainActivity”, “進入監聽事件-自己”);
// 獲取編輯框
EditText username = (EditText) findViewById(R.id.main_username);
EditText password = (EditText) findViewById(R.id.main_password);
// 給編輯框設置值
username.setText(“用戶名”);
password.setText(“123456”);
// 獲取值
String passwordStr = password.getText().toString();
String usernameStr = username.getText().toString();
// 使用Intent傳遞值
// 1.創建一個Intent,要指定class,第一個是我當前的位置,第二個是我要跳轉的位置.
Intent intent = new Intent(MainActivity.this, HomeActivity.class);
//5.啓動意圖
//startActivity(intent);
/* requestCode:類型Int*/
startActivityForResult(intent, 1);

break;

default:
break;
}

}

然後再在裏面寫入一個onActivityResult()方法獲取回傳的數據:

/*activity傳值回調方法

1.取activity返回的數據

2.取值之前要判斷一下請求碼和結果碼
*/
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
Log.d(“mainActivity_onActivityResult”,“進入回調方法”);
super.onActivityResult(requestCode, resultCode, data);
if(requestCode1&&resultCode2) {
String returnData=data.getStringExtra(“returnData”);
Log.d(“mainActivity_onActivityResult”,returnData);
Log.v(“mainActivity”, returnData);
}
}

在homeActivity中的onCreate方法中寫一個鼠標點擊事件用於返回數據:

/*給按鈕添加事件

方式2:直接給按鈕對象綁定事件監聽器

獲取按鈕對象

綁定監聽器
/
//獲取對象
Button button=(Button) findViewById(R.id.home_button);
/
綁定監聽事件 /
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
/
返回數據給MainActivity /
//獲取意圖
Intent intent2=getIntent();
//放返回數據
intent2.putExtra(“returnData”, “這是我回傳的數據”);
/
resultCode:是開發人員自己定義的intent返回標識碼

數據類型:int*/
setResult(2,intent2);
HomeActivity.this.finish();
}
});

最終頁面就會跳轉到Mainactivity頁面,並獲取數據

g.v(“mainActivity”, returnData);
}
}

在homeActivity中的onCreate方法中寫一個鼠標點擊事件用於返回數據:

/*給按鈕添加事件

方式2:直接給按鈕對象綁定事件監聽器

獲取按鈕對象

綁定監聽器
/
//獲取對象
Button button=(Button) findViewById(R.id.home_button);
/
綁定監聽事件 /
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
/
返回數據給MainActivity /
//獲取意圖
Intent intent2=getIntent();
//放返回數據
intent2.putExtra(“returnData”, “這是我回傳的數據”);
/
resultCode:是開發人員自己定義的intent返回標識碼

數據類型:int*/
setResult(2,intent2);
HomeActivity.this.finish();
}
});

最終頁面就會跳轉到Mainactivity頁面,並獲取數據

這就是Android第二章的課程筆記,如果你覺得寫的不錯記得關注我哦!你們的支持就是我不斷創作的源泉

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章