2016-01-30 12 views
5

Quello che sto facendo è questofunzione C# Xamarin Su clic

Button button1 = FindViewById<Button>(Resource.Id.button1); 

button1.SetOnClickListener(new View.OnClickListener() 
    { 
     public void onClick(View v) 
     { 
      // Perform action on click 
     } 
    }); 

ma per alcuni motivi che sto ricevendo OnClickListener sottolineata di rosso. e non posso fare nulla per avviare una funzione quando faccio clic sul mio pulsante.

+0

Stai mescolando Java e C#. In C#, deve esserci un delegato o passare un'istanza di una classe che implementi quell'interfaccia. Poiché si tratta di un duplicato esatto di https://stackoverflow.com/questions/12274549/anonymous-event, voterò per chiudere. –

risposta

6

Il Xamarin.Android modo di fare un SetOnClickListener è via C eventi # stile:

Button button1 = FindViewById<Button>(Resource.Id.button1); 
button1.Click += (sender, e) => { 
    // Perform action on click 
}; 

una lettura obbligatoria per di Xamarin Android Events and Listeners

2

Il vero problema qui è nel vostro SetOnClickListener si sta impostando un inline classe anonima che implementa l'interfaccia OnClickListener.

Questo non è supportata in C#, Dal C# programming guide, si possono trovare,

tipi anonimi sono tipi di classe che consistono di uno o più pubblici proprietà di sola lettura. Non sono ammessi altri tipi di membri della classe come metodi o eventi. Un tipo anonimo non può essere lanciato su alcuna interfaccia o tipo tranne per oggetto.

Ma ciò non significa che non è possibile utilizzare SetOnClickListener affatto.

È possibile fare button1.SetOnClickListener(this) e implementare il OnClickListener nella stessa classe

o

creare una classe (può essere classe interna) implementa OnClickListener con l'implementazione e superare esempio di un al tuo SetOnClickListener

In entrambi i modi, stai obbedendo al "Codice reale" di C# :)

0

Non è necessario utilizzare né delegati né eventi in stile C# , è possibile utilizzare entrambi in base alla classe utilizzata. Ricordate che la View.IOnclicklistener è un'interfaccia così eredita da essa in questo modo,

public class myactivity : AppcompatActivity, View.IonClickListener 

Si richiede di implementare il metodo onclick dell'interfaccia come qui di seguito ,,

public void OnClick(View v) 
     { 
      throw new NotImplementedException(); 
     } 

È possibile utilizzare una miscela di eventi in stile C# e ascoltatori di eventi. Cosa può fare java Xamarin può fare .. Questa è la risposta corretta a questa domanda credo ..