LoginSignup
27
30

More than 5 years have passed since last update.

Activity間のObject引き渡し

Last updated at Posted at 2017-09-08

 方法

いくつか方法はあると思うが、
そんなに大したことないものにコードを沢山書きたくないので、
シンプルに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

27
30
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
27
30