當前位置:
首頁 > 知識 > Android——Intent組件帶參傳遞與返回

Android——Intent組件帶參傳遞與返回

Android 是 單例模式:

表示 application 唯一的。每個應用被啟動的時候,其實是 application 被創建。

Context 上下文:

context 是 Application 和 activity 的父類。很多方法中,傳遞的都是上下文,而不是具體的 Activity 或者 Application。

AndroidManifest.xml :

每一個 activity 都必須在 AndroidManifest.xml 中配置。否則出現 ActivityNotFound 異常。

常用主題:

默 認: @android:style/Theme.Holo.Light.DarkActionBar

啟動頁: @android:style/Theme.Holo.Light.NoActionBar.Fullscreen

窗體化: @android:style/Theme.Holo.Light.Dialog

exported :可以被其他應用程序訪問。

launchMode :啟動模式

&&lable決定應用程序桌面的名稱,icon決定應用程序圖標。 activity 中的屬性設置 會覆蓋 application 中的屬性。

Activity 的生命周期:

onCreate-->onStart-->onResume正常運行期 (又稱 「可見期 」、「 聚焦期 」)

onPause--> 暫停期 (「 失焦期 」):指 activity 被覆蓋了一部分 (或者 有透明窗體中上面 ) ,準備退出時執行。

onStop--> 停止期 : 指 activity 完全看不到了

onDestory--> activity 已經被銷毀

&& onRestart --> 從 onPause 回到 onResume 或者 從 onStop 回到 onStart

&& 想要在 創建 時 銷毀,只需要在 onCreate 方法中調用 onDestory

Android——Intent組件帶參傳遞與返回

創建一個Activity:

1、新建 java 類 --> 繼承 Activity

2、重寫 onCreate 方法, 載入布局 (setContentView)

3、在androidManifest 中註冊該 activity

&& finish 關閉一個activity 。

onBackPressed :

-- 當 activity 中 返回鍵 被按下時調用該方法。

例如: 雙擊退出當前頁面, 代碼如下:

long lastTime = 0;
if (System.currentTimeMillis - lastTime < 2000) {
finish;
} else {
Toast.makeText(this, "再按一次推出", Toast.LENGTH_SHORT).show;
lastTime = System.currentTimeMillis;
}
//思路: 當前系統時間 - 按返回鍵時的系統時間,若間隔小於兩秒,退出。

監聽事件:

每個組件 都有 監聽事件。

View有 三個監聽器:

1、onClickListener點擊事件

2、onLongClickListener長按事件

3、onTouchListener觸摸監聽

Activity 帶參跳轉 :

Bundle: 專門用來攜帶數據的一個類,裡面可以存放各種基本數據類型 和 序列化 的對象。

Intent: intent 有一個 Bundle 的成員變數, 所有數據實際存放在 Bundle。

所以,Intent 可以傳遞 (put) 的數據類型有: 8種基本數據類型 及其 數組、String 和 String數組、兩種序列化對象 Serializable 、Parcelable

例子,代碼如下:

// 第一個頁面

public class MainActivity extends Activity implements OnClickListener {

private EditText et_user, et_pwd;
private Button btn_login;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

init;
}

private void init {
et_user = (EditText) findViewById(R.id.et_user);
et_pwd = (EditText) findViewById(R.id.et_pwd);
btn_login = (Button) findViewById(R.id.btn_login);

btn_login.setOnClickListener(this);
}

@Override
public void onClick(View v) {

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

String name = et_user.getText.toString;
String password = et_pwd.getText.toString;

intent.putExtra("username", name);
intent.putExtra("password", password);
// 傳遞基本數據類型
intent.putExtra("name", "張三");
intent.putExtra("age", 50);

// 傳遞ArrayList數組
ArrayList<String> list = new ArrayList<String>;
list.add("中國");
list.add("廣東");
list.add("深圳");
list.add("南山");
intent.putStringArrayListExtra("list", list);

// 傳遞 User類型的對象 必須是 序列化對象
User user = new User("李四", "123456");
intent.putExtra("user", user);

// 傳遞 一組User類型的對象,用ArrayList裝載
ArrayList<User> userList = new ArrayList<User>;
userList.add(new User("王五", "000000"));
userList.add(new User("趙六", "111111"));
userList.add(new User("田七", "222222"));
userList.add(new User("王八", "333333"));
intent.putExtra("userList", userList);

startActivity(intent);
}
}

// 第二個頁面

public class MainActivity2 extends Activity implements OnClickListener {

private TextView tv_userName, tv_password, tv_list, tv_user, tv_userLiset,
tv_zhangsan, tv_choose, tv_choose2;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity2_main);
init;
show;
}
private void show {
// 獲取Intent 中傳遞的數據 getIntent
Intent intent = getIntent;
String username = intent.getStringExtra("username");
String password = intent.getStringExtra("password");

String name = intent.getStringExtra("name");
int age = intent.getIntExtra("age", 1);

// 接收ArrayList數組 getStringArrayListExtra
ArrayList<String> list = intent.getStringArrayListExtra("list");

// 接收序列化對象 getSerializableExtra
User user = (User) intent.getSerializableExtra("user");

@SuppressWarnings("unchecked")
// 接收 序列化 數組對象 getSerializableExtra
ArrayList<User> userList = (ArrayList<User>) intent
.getSerializableExtra("userList");

// 將獲取到的數據 設置到相應的 組件上
tv_userName.setText(username);
tv_password.setText(password);
tv_zhangsan.setText(name + " " + age);
tv_list.setText(list.toString);
System.out.println(list);
tv_user.setText(user.toString);
tv_userLiset.setText(userList.toString);
}

private void init {
tv_userName = (TextView) findViewById(R.id.username);
tv_password = (TextView) findViewById(R.id.password);
tv_list = (TextView) findViewById(R.id.list);
tv_user = (TextView) findViewById(R.id.user);
tv_userLiset = (TextView) findViewById(R.id.userlist);
tv_zhangsan = (TextView) findViewById(R.id.zhangsan);
tv_choose = (TextView) findViewById(R.id.tv_choose);
tv_choose2 = (TextView) findViewById(R.id.tv_choose2);
}
}

重點方法 摘要:

intent.put(key,value);-- put 方法,根據所傳類型的不同,調用不同的傳遞方法。如:putStringArrayListExtra

getIntent;-- get 方法, 根據所獲取的數據類型,選用不同的方法。如:getStringArrayListExtra 、getSerializableExtra

Activity 帶參返回:

啟動方法為 : startActivityForResult(intent,requestCode); -- requestCode,請求識別碼

需要重寫 Activity 的 onActivityResult的方法來接收 返回數據

在返回數據的頁面中 調用 setResult(resultCode,data); -- resultCode 結果識別碼,data返回的數據,同樣以 Intent 傳遞

例子,代碼如下:

// 接收頁面部分代碼(第一個頁面)

@Override
public void onClick(View v) {
if (v.getId == R.id.btn_car) {
Intent intent = new Intent(MainActivity2.this,BrandMainActivity.class);
// 特殊的啟動方法 startActivityForResult
startActivityForResult(intent, BRAND_RESULT_CODE);
}
}

//需要重寫的方法 onActivityResult --用於接收數據 requestCode 請求碼, resultCode 結果碼, data Intent傳遞的數據
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(requestCode == BRAND_RESULT_CODE){
if(resultCode == RESULT_OK){
String brand = data.getStringExtra("result");
tv_choose.setText(brand);
}
}
}

// 返回數據頁面部分代碼(第二個頁面)

Intent intent = new Intent;
// intent 依舊傳遞數據 put方法 ,區別在於,不需要指定頁面跳轉 如:Intent intent = new Intent(MainActivity.this, MainActivity2.class);
intent.putExtra("result", result);
// 返回結果的特殊方法 setResult
setResult(RESULT_OK, intent);
// 必須調用該方法,結束當前頁面
finish;

重點方法 摘要:

startActivityForResult -- 特殊的啟動方法

onActivityResult-- 接收返回數據 所 需要重寫的 方法

setResult -- 將數據 返回 的特殊方法

反射:

通過 for循環 反射 來獲取對象。 (只是簡化我們的代碼,實際效率比普通方法低)

可以減少 findViewById 、 setOnClickListener 等方法的次數。

代碼如下:

// 使用反射來關聯對象
TextView subject = new TextView[10];

// 反射方式獲取組件
private void reflectFindViewById {
for (int i = 0; i <= subject.length; i++) {
try {
// 反射的反射 獲取 R 文件中的 .class文件 ,返回Int值
int id = R.id.class.getField("tv_subject_" + (i+1)).getInt(null);
subject[i] = (TextView) findViewById(id);
subject[i].setOnClickListener(this);
} catch (Exception e) {
e.printStackTrace;
}
}
}

// 普通方法 代碼如下:

// 普通的方法獲取組件
private void NomfindViewById {
subject[0] = (TextView) findViewById(R.id.tv_subject_1);
subject[1] = (TextView) findViewById(R.id.tv_subject_2);
subject[2] = (TextView) findViewById(R.id.tv_subject_3);
subject[3] = (TextView) findViewById(R.id.tv_subject_4);
subject[4] = (TextView) findViewById(R.id.tv_subject_5);
subject[6] = (TextView) findViewById(R.id.tv_subject_6);
subject[7] = (TextView) findViewById(R.id.tv_subject_7);
subject[8] = (TextView) findViewById(R.id.tv_subject_8);
subject[9] = (TextView) findViewById(R.id.tv_subject_9);
subject[10] = (TextView) findViewById(R.id.tv_subject_10);
subject[0].setOnClickListener(this);
subject[1].setOnClickListener(this);
subject[2].setOnClickListener(this);
subject[3].setOnClickListener(this);
subject[4].setOnClickListener(this);
subject[5].setOnClickListener(this);
subject[6].setOnClickListener(this);
subject[7].setOnClickListener(this);
subject[8].setOnClickListener(this);
subject[9].setOnClickListener(this);
subject[10].setOnClickListener(this);
}

&& 注意: 組件 ID 必須要 有序 -- R.id.class.getField.getInt

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 科技優家 的精彩文章:

RandomAccessFile類的使用
Jenkins:執行 PowerShell 命令
使用JDBC技術連接資料庫(附源碼)——JAVA的簡單應用
FZU 2253 salty fish

TAG:科技優家 |

您可能感興趣

人物傳記-宋史·李參傳
丹參能夠調節血脂,降尿酸嗎?丹參傳統藥用功效介紹
民間故事:海參傳奇!海中棄婦,被人魚所救,好心廚子抱得美人歸!