2017-02-10 1 views
0

J'ai implémenté une bibliothèque .aar pour mon projet Android qui fournit des indicateurs de vitesse animés, etc. La bibliothèque s'appelle "SpeedometerView-1.0.1.aar"Impossible d'instancier l'interface dans Android, erreur "anonyme"

Tout fonctionne bien et fait son travail. Cependant, j'essaie de mettre en place un label pour mes speedomètres. J'ai utilisé la documentation trouvée pour cette bibliothèque. Un exemple de base se trouve ici:

https://github.com/ntoskrnl/AndroidWidgets

Voici le code dans l'exemple tutoriel:

Utilisation

importer la bibliothèque à votre projet.

Dans votre fichier XML de mise en page ajoutez SpeedometerGauge comme indiqué:

<com.cardiomood.android.controls.gauge.SpeedometerGauge 
    android:layout_height="wrap_content" 
    android:layout_width="match_parent" 
    android:padding="8dp" 
    android:id="@+id/speedometer" /> 

Configurer SpeedometerGauge:

private SpeedometerGauge speedometer; 

    // Customize SpeedometerGauge 
    speedometer = (SpeedometerGauge) v.findViewById(R.id.speedometer); 

    // Add label converter 
    speedometer.setLabelConverter(new SpeedometerView.LabelConverter() { 
     @Override 
     public String getLabelFor(double progress, double maxProgress) { 
      return String.valueOf((int) Math.round(progress)); 
     } 
    }); 

    // configure value range and ticks 
    speedometer.setMaxSpeed(300); 
    speedometer.setMajorTickStep(30); 
    speedometer.setMinorTicks(2); 

    // Configure value range colors 
    speedometer.addColoredRange(30, 140, Color.GREEN); 
    speedometer.addColoredRange(140, 180, Color.YELLOW); 
    speedometer.addColoredRange(180, 400, Color.RED); 

Mon problème est avec le "Ajouter convertisseur d'étiquettes".

Lorsque je tente d'utiliser dans mon code, je reçois cette erreur:

setLabelConverter (com.cardiomood.android.controls.gauge.SpeedometerGauge.LabelConverter) in SpeedometerGauge cannot be applied to (anonymous com.cardiomood.android.speedometer.SpeedometerView.LabelConverter)

Voici comment mon code correspondant ressemble à:

private void setCoolingIndicatorAttributes() { 
     coolingIndicator.setMaxSpeed(250); 
     coolingIndicator.setMajorTickStep(50); 
     coolingIndicator.setMinorTicks(3); 
     coolingIndicator.addColoredRange(0, 140, Color.GREEN); 
     coolingIndicator.addColoredRange(140, 200, Color.YELLOW); 
     coolingIndicator.addColoredRange(200, 250, Color.RED); 
//   Add label converter 
     coolingIndicator.setLabelConverter(new SpeedometerView.LabelConverter() { 
      @Override 
      public String getLabelFor(double progress, double maxProgress) { 
       return String.valueOf((int) Math.round(progress)); 
      } 
     }); 
    } 

Encore une fois, ce ne ^^^ travail. Je reçois l'erreur je l'ai décrit:

setLabelConverter (com.cardiomood.android.controls.gauge.SpeedometerGauge.LabelConverter) in SpeedometerGauge cannot be applied to (anonymous com.cardiomood.android.speedometer.SpeedometerView.LabelConverter)

Comme vous pouvez le voir, la seule différence est le mot « anonyme » devant le nom du package et la classe.

J'ai essayé pas mal d'approches pour résoudre ce problème, mais je n'ai pas réussi. Il doit y avoir un moyen très facile de résoudre ce problème qui, pour une raison quelconque, m'échappe. J'apprécie toute contribution.

Merci!

EDIT: Je pense que je l'ai résolu ce problème:

Je pense que je réussi à résoudre ce: le nom doit être SpeedometerGauge, pas SpeedometerView.

donc le bon code est:

//   Add label converter 
     coolingIndicator.setLabelConverter(new SpeedometerGauge.LabelConverter() { 
      @Override 
      public String getLabelFor(double progress, double maxProgress) { 
       return String.valueOf((int) Math.round(progress)); 
      } 
     }); 
    } 
+1

'la seule différence est le mot "anonyme". Non, la différence est aussi dans les noms de paquets: 'SpeedometerGauge' vs' SpeedometerView' – 0xDEADC0DE

Répondre

2

Il semble que vous instancier un SpeedometerGauge et non un SpeedometerView, vous devez donc remplacer

speedometer.setLabelConverter(new SpeedometerView.LabelConverter() { 

par

speedometer.setLabelConverter(new SpeedometerGauge.LabelConverter() { 
+0

Oui, donc le tutoriel était faux. Maintenant ça marche. –