Passare oggetti custom con gli Intent in Android e Kotlin

Mattepuffo's logo
Passare oggetti custom con gli Intent in Android e Kotlin

Passare oggetti custom con gli Intent in Android e Kotlin

Nella mia Activity ho una ListView di oggetti custom.

Al click sua una voce voglio passare l'intero oggetto cliccato ad una seconda Activity.

Il tutto in Kotlin!

Do per scontato che abbiate gia la ListView, e che abbiate già creato la seconda Activity.

Partiamo dal nostro oggetto custom:

import java.io.Serializable

data class Book(
    val id: Int,
    val title: String
) : Serializable

In sostanza deve implementare Serializable.

Adesso nella nostra ListView:

override fun onCreate(savedInstanceState: Bundle?) {
	super.onCreate(savedInstanceState);
	setContentView(R.layout.activity_main);

	val listView = findViewById<ListView>(R.id.listView);

	listView.setOnItemClickListener { parent, view, position, id ->
		val b = parent.getItemAtPosition(position) as Book;
		val intent = Intent(this, BookActitìvity::class.java);
		intent.putExtra("BOOK", b);
		startActivity(intent);
	}

}

Infine nella seconda Activity:

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.util.Log

class BookActitìvity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_book);

        val intent = getIntent();
        val book = intent.getSerializableExtra("BOOK") as? Book;
        Log.e("BOOK", book?.title);
    }
}

Vi ricordo che la ListView è riempita usando un custom adapter.

In alternativa avremo dovuto passare tutti i campi dell'oggetto uno ad uno, il che non è comodo se abbiamo troppi campi.

Enjoy!


Condividi

Commentami!