Activity間で自作ArrayListを渡す方法

Activity間で自作ArrayListを渡す方法です。
Kotlinです。
Parcelable化するところが肝です。

流れ

一覧画面から詳細画面に自作クラスのArrayListを渡す流れです。

一覧画面
MyListActivity.kt
詳細画面
MyDetailActivity.kt
渡すデータ
MyDataList:ArrayList<MyData>

送信元のActivity(MyListActivity.kt

1
2
3
4
val intent = Intent(this, MyDetailActivity::class.java)
intent.flags = Intent.FLAG_ACTIVITY_CLEAR_TOP or Intent.FLAG_ACTIVITY_SINGLE_TOP
intent.putParcelableArrayListExtra("MyDataList", MyDataList.list);
startActivity(intent)

送信するデータのリスト(MyDataList.kt

1
2
3
4
5
import android.os.Parcelable
import kotlinx.android.parcel.Parcelize

@Parcelize
data class MyDataList(var list:ArrayList<MyData>) : Parcelable

送信する個別データ(MyData.kt

1
2
3
4
5
import android.os.Parcelable
import kotlinx.android.parcel.Parcelize

@Parcelize
data class MyData(var timeStamp: String) : Parcelable

送信先のActivity(MyDetailActivity.kt

1
2
3
4
5
6
7
8
9
10
11
12
13
import android.os.Bundle

class MyDetailActivity : Activity() {

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
// 本来はgetParcelableExtraが正しそうだけど以下のエラーになるのでgetSerializableExtraを使う
// Not enough information to infer type variable T
// val myDataList = intent.getParcelableExtra("MyDataList") as ArrayList<MyData>
val myDataList = intent.getSerializableExtra("MyDataList") as ArrayList<*>
setContentView(view)
}
}

ちなみにMyDataがただのStringやIntgerならputStringArrayListExtraなどを使えば良いのでParcelable化する必要はないです。

今回はMyDataが自作クラスなのでputParcelableArrayListExtraを使う必要があり、これを使うためにParcelable化が必要だったということです。

以上です。

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×