ホーム
2022.3.8

kotlin 新しいアクティビティを開く

アクティビティを開くだけのサンプルと、テキストメッセージ付きで開く場合のサンプルです。
メッセージ付きで開いたアクティビティからは、戻って来るときにもテキストメッセージを付けています。
startActivityForResultはdeprecated(非推奨)となったため別の方法で実現しています。

0. アイテムIDを使ったプログラミングについてはこちらを参照してください。
1. SecondActivity, ThirdActivityを追加しています。(ProjectにEmptyActivityをそれぞれの名称で追加します)
2. MainActivity.ktでは、ただ開くだけのボタンと、メッセージ付きで開くボタンの処理を記述しています。
3. ただ開くだけのボタンでSecondActivityを開き、メッセージ付きで開くボタンでThirdActivityを開きます。
4. メッセージ付きで開く場合は、開いたアクティビティが閉じたときの処理を定義して開いています。
5. ThirdActivity.ktは開いたときにMainActivityからのメッセージを取得して、textViewに表示しています。
6. Returnボタンが押されたときに返すメッセージをResultにセットして閉じています。
7. これでReturnボタンが押されるとThirdActivityは閉じられ、MainActivityに戻ってきてThirdActivityからのメッセージを表示できます。

MainActivity.kt

import android.app.Activity
import android.content.Intent
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import androidx.activity.result.contract.ActivityResultContracts
import com.example.samplenewactivity.databinding.ActivityMainBinding

class MainActivity : AppCompatActivity() {
private lateinit var binding: ActivityMainBinding
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ActivityMainBinding.inflate(layoutInflater)
setContentView(binding.root)

// click open button.ただ開く場合
binding.btnOpen.setOnClickListener {
val intent = Intent(this, SecondActivity::class.java)
startActivity(intent)
}

// process when return from another activity. 戻ってきたときの処理を定義
val startMyActivity =
registerForActivityResult(ActivityResultContracts.StartActivityForResult()) {
when (it.resultCode) {
Activity.RESULT_OK -> {
val intent = it.data
if (intent == null) {
binding.txvMessage.text = "return from third activity."
} else {
val string = intent.getStringExtra(ThirdActivity.EXTRA_MESSAGE)
binding.txvMessage.text = string
}
}
Activity.RESULT_CANCELED -> {
binding.txvMessage.text = "cancel clicked."
}
}
}

// click 'open with data' button. メッセージをつけて開く場合
binding.btnOpenWithData.setOnClickListener {
// open thirdActivity. アクティビティを開く
val intent = Intent(this, ThirdActivity::class.java)
intent.putExtra(ThirdActivity.EXTRA_MESSAGE, "Hi, third activity.")
startMyActivity.launch(intent)
}
}
}

ThirdActivity.kt

import android.app.Activity
import android.content.Intent
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import com.example.samplenewactivity.databinding.ActivityThirdBinding

class ThirdActivity : AppCompatActivity() {
companion object {
const val EXTRA_MESSAGE = "message"
}

private lateinit var binding: ActivityThirdBinding

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ActivityThirdBinding.inflate(layoutInflater)
setContentView(binding.root)

// Get information from Main Activity.メインアクティビティからの情報を取得。
val string = this.intent.getStringExtra(EXTRA_MESSAGE)
binding.txvSample.text = string

// Click return button.リターンボタン押された時の処理。
binding.btnReturn.setOnClickListener {
val intent = Intent()
intent.putExtra(EXTRA_MESSAGE, "Hi, MainActivity.")
setResult(Activity.RESULT_OK, intent)
finish()
}
}
}