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
posted @ 2022-10-18 11:39  隔篁竹闻水声  阅读(82)  评论(0)    收藏  举报