Archives par étiquette : listener

Ajouter un Custom Listener à un Widget personnalisé

Lorsque que l’on écrit un widget ou vue personalisé , les Listeners de base tel que onClickListener ne sont parfois pas suffisants. On peut avoir besoin de déclarer ses propres listeners qui répondront à des cas très précis.

Voici un exemple générique d’implémentation de listener personalisé ou custom listener.

Interface :

Nous supposons que votre widget est déjà en partie crée. Dans notre exemple il s’appelera MyCustomView.
La première étape est de créer une interface qui va gérer le Listener :

public interface OnMyCustomeEventListener {
	public abstract void onMyCustomEvent();
}

Cette interface ne comporte qu’une méthode abstraite pour rester simple , mais il est bien entendu possible de faire quelque chose de plus complexe avec plusieurs méthodes à redéfinir.

Modification de la vue personnalisée :

Passons à la vue. je n’ai garder que le code qui nous intéresse ici :

class MyCustomView extends View
{
	private OnMyCustomEventListener eventListener = null;

	/*
	* Le code de votre widget
	*/

	public void setOnMyCustomEventListener(OnMyCustomeEventListener listener)
	{
		this.eventListener = listener;
	}

	private void onMyCustomEvent()
	{
		if(eventListener != null)
			eventListener.onMyCustomEvent();
	}
}

1- On commence avec une variable qui contiendra une instance de notre listener.
2- On ajoute ensuite un setter setOnMyCustomEventListener pour que l’on puisse définir notre listener depuis l’activity.
3- On termine ensuite avec une méthode onMyCustomEvent que vous pourrez appelez ou vous voudrez dans votre code.

L’intérêt de cette dernière méthode c’est que l’on va y faire tous les tests nécessaires à la réalisation de l’événement. Nous testons dans l’exemple l’existance d’une instance de OnMyCustomeEventListener mais on pourrait imaginer vérifier d’éventuels paramètres conditionnant l’execution de l’événement.
Une fois ces 3 étapes ajoutées à votre widget , le plus gros du travail est fait. Il ne reste plus qu’à définir votre listener dans l’activity

Ajout du Listener :

public class MyActivity extends Activity
{
	private OnMyCustomeEventListener MyCustomViewListener = new OnMyCustomeEventListener () {
		@Override
		public void onMyCustomEvent()
		{
			//Ecrire ici votre événement
		}
	}

	public void onCreate(Bundle savedInstanceState)
	{
		MyCustomView myView = (MyCustomView) findViewById(R.id.myView);
		myView.setOnMyCustomEventListener(MyCustomViewListener);
	}
}

Dans notre activity on créer une variable qui instancie notre interface. Cette variable est donc notre listener. Ne reste ensuite qu’à passer ce listener à notre vue personnalisée via le setter précédemment défini.