Formation Android

TP 2 - Compose & Intents

Objectif

implémenter des actions sur nos tâches, en naviguant entre des Activity et partager des infos entre elle ou dans une autre application avec des Intent.

Suppression d’une tache

Dans le layout de vos item, ajouter un ImageButton qui servira à supprimer la tâche associée. Vous pouvez utiliser par exemple l’icône @android:drawable/ic_menu_delete

Aidez vous des lignes de code plus bas pour réaliser un “Click Listener” à l’aide d’une lambda en suivant ces étapes:

var onClickDelete: (Task) -> Unit = {}
onClickDelete(task)
myAdapter.onClickDelete = { task ->
    // Supprimer la tâche
}

Compose: DetailActivity

startActivity(intent)

Ajout de tâche complet: Launcher

val createTask = registerForActivityResult(StartActivityForResult()) { result ->
  // dans cette callback on récupèrera la task et on l'ajoutera à la liste
}
createTask.launch(intent)

Ajout de tâche complet: DetailActivity

val newTask = Task(id = UUID.randomUUID().toString(), title = "New Task !")

Ajout de tâche complet: Résultat

val task = result.data?.getSerializableExtra("task") as Task?

Édition d’une tâche

Inspirez vous de ce que vous avez fait pour le bouton “supprimer” et le bouton “ajouter” pour créer un bouton “éditer” permettant de modifier chaque tâche en ouvrant l’activité DetailActivity pré-remplie avec les informations de la tâche en question:

mutableStateOf(initialTask ?: newTask)

Interface et délégation

Une façon plus classique de gérer les clicks d’un item est de définir une interface que l’on implémentera dans l’Activity/Fragment. Mettez à jour votre code pour utiliser cette méthode:

interface TaskListListener {
  fun onClickDelete(task: Task)
  fun onClickEdit(task: Task)
}

class TaskListAdapter(val listener: TaskListListener) : ... {
  // use: listener.onClickDelete(task)
}

class TaskListFragment : Fragment {
  val adapterListener : TaskListListener = object : TaskListListener {
    override fun onClickDelete(task: Task) {...}
    override fun onClickEdit(task: Task) {...}
  }
  val adapter = TaskListAdapter(adapterListener)
}

Partager

Changements de configuration

Que se passe-t-il pour votre liste si vous tournez votre téléphone pour passer en mode paysage ? 🤔