2015-03-17 17 views
5

Sto provando a visualizzare una vista personalizzata da xamarin.forms. Quando provo a eseguirne il rendering con il seguente codicecostruttore predefinito non trovato di tipo 'MyClass'

[assembly: ExportRenderer (typeof (SwipeableCard), typeof (CardContainer))].

Ma un errore tiri come

costruttore di default non trovato di tipo 'Com.andtinde.CardContainer'.

Suppongo che sia perché il contenitore di schede non ha un costruttore predefinito. E non posso fornirne uno perché eredita da Adapterview.

Quello che sto facendo è sbagliato. Qualsiasi aiuto sarebbe appagato.

risposta

2

Hai già identificato quello che stai sbagliando. L'ExportRenderer ha bisogno di un costruttore predefinito per essere in grado di fare ciò che sta facendo. Perché l'ereditarietà di AdapterView ti impedisce di avere un costruttore predefinito?

Si dovrebbe essere in grado di fare qualcosa di simile:

public class CardContainer 
{ 
    public CardContainer() // This is a default constructor 
     : base(...) // If base class requires arguments, pass them here 
    { 
    } 
} 
+0

Grazie @Steve farmi provare che una volta –

2

si sono probabilmente meglio ereditando da ViewRenderer e fornendo il CardContainer come il tipo di visualizzazione nativa. Quindi eseguire l'override del metodo OnElementChanged di ViewRenderer e creare un nuovo CardContainer per il renderer. Di seguito è una versione breve che potrebbe iniziare.

Registrazione:

[assembly: ExportRenderer(typeof(SwipeableCard), typeof(SwipeableCardRenderer))] 

definizione Classe:

SwipeableCardRenderer : ViewRenderer<SwipeableCard, CardContainer> 

OnElementChanged manuali:

if (this.Control == null) 
{ 
    this.SetNativeControl(new CardContainer(this.Context)); 
} 
20

Penso che questo sia un bug noto in Xamarin. Ho avuto lo stesso problema con un servizio di dipendenza. L'ho risolto impostando "Link Framework SDKs Only" nel comportamento Linker di iOS Build Options.

+1

ringraziamento così tanto! – Chris

+2

Questo dovrebbe essere contrassegnato come una risposta corretta. –

0

Questo non è un bug su Xamarin, è necessario sapere come gestire gli assembly collegati. Tutti i lavori di runtime in xamarin otterranno un errore come questo, ad esempio non è possibile ottenere la proprietà della classe in runtime o creare un'istanza in runtime quando quell'assemblea non è collegata. È possibile gestire manualmente gli assiemi collegati o impostarli nell'opzione applicazione come Alessio Campanelli rispondi allo here, se non lo si imposta manualmente l'applicazione diventerà di grandi dimensioni nel pacchetto di rilascio come il file apk. Come impostarlo manualmente?

  1. Creare un file XML nel nome dell'applicazione Android è "linked.xml"
  2. clic destro e andare a peroperties di "collegato.xml" e impostare 'Build Azione' a 'LinkDescription'
  3. aggiungere gli assembly quelli sono utilizzati in fase di esecuzione in questo modo:
<?xml version="1.0" encoding="utf-8" ?> 
    <linker> 
     <assembly fullname="Newtonsoft.Json"> 
     <type fullname="*" /> 
     </assembly> 
    </linker> 

Linker in xamarin

Problemi correlati