# 方法
いくつか方法はあると思うが、
そんなに大したことないものにコードを沢山書きたくないので、
シンプルにobjectにSerializableをimplementsして引き渡す
Gsonを利用した例はコチラ
Activity間のObject引き渡し(Gson)
実装
object
Activity間で引き渡すobject
DataState.kt
data class DataState(
val id: Int,
val name: String
): Serializable
Activity
引き渡し元
MainActivity.kt
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val intent = Intent(this, SecondActivity::class.java)
val state = DataState(0, "name0")
intent.putExtra(SecondActivity.KEY_STATE, state)
startActivity(intent)
}
}
引き渡し先
SecondActivity.kt
class SecondActivity : AppCompatActivity() {
companion object {
val KEY_STATE = "key_state"
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_second)
val state = intent.getSerializableExtra(KEY_STATE)
if(state is DataState){
println(state.id)
println(state.name)
}
}
}
出力結果
0
name0
list objectの引き渡し
Activity
引き渡し元
MainActivity.kt
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val states = arrayListOf<DataState>()
for(i in 0..2){
val state = DataState(i, "name$i")
states.add(state)
}
val intent = Intent(this, SecondActivity::class.java)
intent.putExtra(SecondActivity.KEY_STATE, states)
startActivity(intent)
}
引き渡し先
SecondActivity.kt
class SecondActivity : AppCompatActivity() {
companion object {
val KEY_STATE = "key_state"
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_second)
val states = intent.getSerializableExtra(KEY_STATE) as ArrayList<*>
states.forEach {
if(it is DataState){
println(it.id)
println(it.name)
}
}
}
}
list object 出力結果
0
name0
1
name1
2
name2
まとめ
とりあえずobjectがSerializableをimplementsしておけば
そのままだろうが、listにしようが引き渡せます。
GitHubに公開しました。
https://github.com/yoshihitoijichi/ActivityIntentObjectSample