如何在 Kotlin 中将对象列表从活动 A 传递到活动 B?

Fli*_*ker 2 android android-intent android-activity kotlin

我有 2 个活动,我想传递一个对象的数组列表并将其显示在 ListView 上

活动一:

     btnGuardar.setOnClickListener{

                if(edtNombre.text.toString().equals("") || 
                     edtApellido.text.toString().equals("") || 
                     edtFecha.text.toString().equals("")){

                    Toast.makeText(this@Main2Activity, "Debes llenar todos los campos!", Toast.LENGTH_SHORT).show()
                }else{
                    var estadoSel : String
                    estadoSel = estado.onItemSelectedListener.toString()
                   var per = Persona(edtNombre.text.toString(),edtApellido.text.toString(),estadoSel,edtFecha.text.toString())
                    personas.add(per)
                    val intent = Intent(this@Main2Activity,Main3Activity::class.java)
                    //intent.putExtra("Personas",  personas as Serializable)
                    intent.putParcelableArrayListExtra("Personas", ArrayList(personas))
                    edtFecha.text = null
                    edtApellido.text = null
                    edtNombre.text = null
                    estado.setSelection(0)
                    Toast.makeText(this@Main2Activity, "Registro Guardado", Toast.LENGTH_SHORT).show()
                }
            }
Run Code Online (Sandbox Code Playgroud)

活动B:

 override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main3)
        supportActionBar?.setDisplayHomeAsUpEnabled(true)
        //val intent = Intent()
        val bundle = getIntent().extras
        var arr  = bundle?.getParcelableArrayList<Persona>("Personas")!!
        //var arr : ArrayList<Persona> = (ArrayList<Persona>())intent.getSerializableExtra("Personas")
        //intent.getSerializableExtra("Personas")
        //arr = intent.extras!!.get("Personas")
        val adapter = ArrayAdapter(this, android.R.layout.simple_list_item_1, arr)
        listaPersonas.adapter = adapter
    }
Run Code Online (Sandbox Code Playgroud)

但我遇到了空指针异常

Nar*_* NK 6

在您应用程序的 android 范围下的 build.gradle 中添加此内容并同步 gradle -

androidExtensions {
        experimental = true
    }
Run Code Online (Sandbox Code Playgroud)

然后按如下方式制作您的对象类 parceble -

@Parcelize
data class Persona() : Parcelable {

}
Run Code Online (Sandbox Code Playgroud)

现在您可以按意图发送和接收 Parcelable 列表。

更新:@Parcelize 现在不再是实验性的,请按照此答案更新实现/sf/answers/4544764311/