2010-11-22 17 views
0

Dans mon application, appuyer sur une ligne de liste ou sur un bouton signifie exécuter les mêmes commandes. Mon problème est que la liste et le bouton ont des écouteurs différents (AdapterView.OnItemClickListener vs View.OnClickListener). Comment puis-je ajouter le code pour les 2 vues (en tant qu'auditeur) sans avoir de code en double.Même écouteur pour la liste et le bouton

Cordialement

Répondre

0

Le meilleur moyen est d'écrire une classe wrapper à la fois Button et List, et avoir un auditeur commun .... et les utiliser dans votre projet .. mais si vous n'êtes pas prêt à prendre cette douleur, la façon la plus simple est aussi dit Octavian, mettre la logique dans une méthode, et appeler à la fois les lieux :)

+0

Pourriez-vous, s'il vous plaît, être plus précis avec la classe wrapper? – Gratzi

+1

oui, écrire une classe comme MyButton qui étend Button et MyList qui étend List et laisse implémenter une interface appelée MyInterface qui a une méthode appelée comme widgetTaped (...) maintenant dans MyList et MyList lorsque leurs listes de clics respectifs sont appelés, appelez la méthode widgetTaped(). Il y a beaucoup d'autres façons de le faire aussi ... s'il vous plaît explorer – amithgc

+0

Merci pour les conseils. J'ai créé un écouteur qui implémente le listener list et le listener de la vue, et qui a une méthode appelée dans les deux méthodes listeners. – Gratzi

1

Comment puis-je ajouter le code pour les 2 vues (comme un écouteur) sans avoir le code en double.

Implémentez la logique de travail dans une méthode et appelez simplement cette méthode à partir de vos écouteurs.

+0

Je sais que, mais en utilisant une méthode statique Ce n'est pas mon premier choix. Je me demandais si je pouvais utiliser un auditeur pour les 2 cas. – Gratzi

+0

Cela n'aurait aucun sens d'avoir un auditeur global. Qui a dit que ça devait être une méthode statique? Je n'ai pas dit ça. –

+0

ce ne sera pas une méthode statique, (une pour Octavian) ... un ajout, j'ai utilisé une variable booléenne pour déterminer la source de mon appel de méthode ... Merci encore Octavian! – Prasham

1

Voici ma solution:

public class SelectRecipeListener implements AdapterView.OnItemClickListener, 
            View.OnClickListener{ 
private Context currentContext; 
private boolean storeAsLastViewed; 

public SelectRecipeListener(Context context, boolean store) { 
    currentContext = context; 
    storeAsLastViewed = store; 
} 

public void onItemClick(AdapterView<?> parent, View view, int position, 
     long id) { 
    execute((String) view.getTag()); 
} 

public void onClick(View v) { 
    execute((String) v.getTag()); 
} 

private void execute(String id) { 
    Intent intent = new Intent(currentContext, RecipeTabHost.class); 
    intent.putExtra(currentContext.getResources().getString(
      R.string.recipe_id_transition_key), id); 
    intent.putExtra(currentContext.getResources().getString(
      R.string.last_recipe_id_storing_key), storeAsLastViewed); 
    currentContext.startActivity(intent); 
} 

}