Android笔记ch03
ch3
使用intent启动另一个activity
binding.button1.setOnClickListener {
val intent = Intent(this, MainActivity2::class.java)
startActivity(intent)
}
启动另一个activity并传输数据
// MainActivity1
binding.button1.setOnClickListener {
val intent = Intent(this, MainActivity2::class.java)
intent.putExtra("DataName","Data")
startActivity(intent)
}
// MainActivity2
class MainActivity2 : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
val binding = ActivityMain2Binding.inflate(layoutInflater)
setContentView(binding.root)
val extraData = intent.getStringExtra("DataName")
Log.d("SecondActivityLog", "extra data is ${extraData.toString()}")
}
使用Bundle在Activity中传数据
// Activity1
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
val binding = ActivityMainBinding.inflate(layoutInflater)
setContentView(binding.root)
binding.button1.setOnClickListener {
val intent = Intent(this, MainActivity2::class.java)
//intent.putExtra("DataName","Data")
val bundle:Bundle = Bundle()
bundle.putString("DataName","Data")
bundle.putInt("bundleIntValue",1000)
intent.putExtras(bundle)
startActivity(intent)
}
// Activity2
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
val binding = ActivityMain2Binding.inflate(layoutInflater)
setContentView(binding.root)
//val extraData = intent.getStringExtra("DataName")
//Log.d("SecondActivityLog", "extra data is ${extraData.toString()}")
val bundle: Bundle? = intent.extras
Log.d("SecondActivityLog", "extra data is ${bundle?.getString("DataName")}")
Log.d("SecondActivityLog", "extra data is ${bundle?.getInt("bundleIntValue")}")
}
启动另一个Activity以后返回数据
使用Activity Result API
再见!onActivityResult!你好,Activity Results API! - 知乎 (zhihu.com)
我们首先要在MainActivity1中定义requestDataLauncher
同时定义返回的接受代码
private val requestDataLauncher =
registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result ->
if (result.resultCode == RESULT_OK) {
result.data?.let { it ->
it.getStringExtra("FromMA2")?.let { it1 -> Log.d("MainActivityBack", it1) }
it.getIntExtra("Number", 0).let { it1 -> Log.d("MainActivityBack", it1.toString()) }
}
}
}
启动MainActivity使用requestDataLauncher
// MainActivity1
binding.button1.setOnClickListener {
val intent = Intent(this, MainActivity2::class.java)
val bundle: Bundle = Bundle()
bundle.putString("DataName", "Data")
bundle.putInt("bundleIntValue", 1000)
intent.putExtras(bundle)
// startActivity(intent)
requestDataLauncher.launch(intent)
MainActivity2返回代码
binding.button2.setOnClickListener {
val bundle2: Bundle = Bundle()
//在这里定义bundle会在函数结束的时候消失?
bundle2.putString("FromMA2", "RETURN")
bundle2.putInt("Number", 2233)
intent.putExtras(bundle2)
setResult(RESULT_OK, intent)
finish()
}
Activity活动获得Fragment对象
在Activity执行Fragment的方法
val fragmentManager = supportFragmentManager
val viewFragment=fragmentManager.findFragmentById(binding.picFrag.id) as ViewFragment
viewFragment.changePoint(a, b)
Fragment获得Activity活动
val mainActivity = activity as MainActivity