5

Mi piacerebbe essere in grado di modificare OnItemClickListener per un ListView dinamicamente. Tuttavia, lo API non è chiaro se questo sia accettabile o meno, né su quale sarà il risultato se lo faccio.Il richiamo di setOnClickListener da più classi genera solo un callback?

Quello che vorrei è che se chiamo listView.setOnItemClickListener() da una classe, e poi di nuovo da una classe diversa, solo la classe più recente ottiene la richiamata.

Questa domanda potrebbe anche essere applicata a SetOnClickListener().

L'API potrebbe essere implementata per comportarsi in questo modo, ma potrebbe essere implementata in modo tale che tutte le classi che hanno chiamato setOnItemClickListener ottengano il callback.

Quale comportamento viene effettivamente implementato dall'API Android?

risposta

9

Scopri i AdapterView.setOnItemClickListener() il codice sorgente here:

/** 
* Register a callback to be invoked when an item in this AdapterView has 
* been clicked. 
* 
* @param listener The callback that will be invoked. 
*/ 
public void setOnItemClickListener(OnItemClickListener listener) { 
    mOnItemClickListener = listener; 
} 

Nel mondo Java, in genere un metodo setter saranno svuotati valore precedente e impostare variabile di istanza dell'oggetto per il nuovo valore. Quindi il comportamento di cui si sta parlando è solo la classe più recente ottiene il callback.


potrebbe invece essere implementata in modo tale che tutte le classi, che hanno setOnItemClickListener ottenere il callback.

Nel mondo Java, anche questo è possibile, in questo caso, come una buona pratica programmazione orientata agli oggetti, di solito chiamiamo esso addOnItemClickListener(), che è più specificamente, usare un elenco di negozio Listener/gestire gli ascoltatori si moltiplicano all'interno del implementazione effettiva. Questo non è il modo in cui AdapterView.setOnItemClickListener() è implementato in API.

+0

Dopo aver posto la domanda, avevo pensato alla distinzione nella nomenclatura di aggiungere un listener contro l'impostazione di un listener e ho pensato che sarebbe stato un termine improprio se non si fosse comportato come mi aspettavo. Questo sembra più una semantica del linguaggio umano di una convenzione specifica di Java. Penso che mi sarei appena aspettato di leggere qualcosa che specificava questo nella documentazione dell'API. Grazie per il chiarimento. –

4

Sei libero di setOnItemClickListener() tutte le volte che vuoi, verrà utilizzato solo il più recente OnItemClickListener.

0
String className = "MyOnClickListener"; 
obj = (OnClickListenerInterface)(Class.forName(className).newInstance()); 

Si dovrà creare un'interfaccia per l'ascoltatore, ma è possibile implementare la diversa ascoltatore in diversi clasess, e poi chiamato ognuno di loro in modo dinamico, come è mostrato in questa porzione di codice.

Problemi correlati