類型
- 隱含(implicit)意圖 : 告知系統動作的類型,讓系統判斷如何完成要求。
- 明確(explicit)意圖 : 明確告知要啟動的 Activity 。
傳送 Intent
val b = Bundle()
b.putString("key", "Hello~") //把資料放入 Bundle 中
val intent = Intent(this, Main2::class.java) //宣告切換頁面的意圖
intent.putExtras(b) //夾帶 Bundle
startActivity(i)
在 adapter 中使用 context
override fun onBindViewHolder(holder: LetterViewHolder, position: Int) {
val item = list.get(position)
holder.button.text = item.toString()
holder.button.setOnClickListener {
val context = holder.itemView.context
val intent = Intent(context, DetailActivity::class.java)
intent.putExtra("latter", holder.button.text.toString())
context.startActivity(intent)
}
}
取出 Bundle 中的資料
intent?.extras?.let{
val value1 = it.getInt("key1")
val value2 = it.getString("key2")
}
返回資料 startActivityForResult() (不建議使用此方式)
1. 在第一個 Activity 建立 Intent、 啟動第二個 Activity
val b = Bundle()
b.putString("key", "Hello~") //把資料放入 Bundle 中
val intent = Intent(this, Main2::class.java) //宣告切換頁面的意圖
intent.putExtras(b) //夾帶 Bundle
startActivityForResult(intent, 1)
2. 在第二個 Activity 中接收資料與設定要返回的資料、結束第二個 Activity
intent?.extras?.let {
val value1 = it.getString("key")
val b = Bundle()
b.putString("key", "Hi~")
val intent = Intent().putExtrras(b)
setResult(Activity.RESULT_OK, intent)
finish()
}
3. 在第一個 Activity 中取得返回的資料
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data)
data?.extras?.let {
if (requestCode==1 && resultCode== Activity.RESULT_OK){
//取得返回的資料
val value = it.get("key")
Log.d("value", value.toString())
}
}
}
取得活動結果 (推薦)
隱式意圖使用方式
//開啟網站
val queryUrl: Uri = Uri.parse("${DetailActivity.SEARCH_PREFIX}${item}")
val intent = Intent(Intent.ACTION_VIEW, queryUrl)
常用意圖 : 通用 Intent | Android 开发者 | Android Developers檢查是否有應用程式可以處理此意圖
如果沒有能處理的,可能會當機。
if (activity?.packageManager?.resolveActivity(intent, 0) != null) {
startActivity(intent)
}
參考資料
- 《輕鬆學會Android Kotlin實作開發:精心設計20個Lab讓你快速上手》
- 活動和意圖 (android.com)
- 導覽與返回堆疊 (android.com) 👉 檢查是否有應用程式可以處理此意圖
0 comments:
張貼留言