【问题标题】:Can't instantiate interface in Android, "anonymous" error无法在 Android 中实例化接口,“匿名”错误
【发布时间】:2017-02-10 09:40:32
【问题描述】:

我为我的 Android 项目实现了一个 .aar 库,它提供了一些动画速度指示器等。该库名为“SpeedometerView-1.0.1.aar”

一切都运作良好,并且可以发挥作用。但是,我正在尝试为我的速度计实现一个标签。我已经使用了为这个库找到的文档。在这里可以找到一个基本示例:

https://github.com/ntoskrnl/AndroidWidgets

这是教程示例中的代码:

用法

将库导入您的项目。

在您的布局 xml 文件中添加 SpeedometerGauge,如下所示:

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

配置 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);

我的问题在于“添加标签转换器”。

当我尝试在我的代码中使用它时,我收到了这个错误:

setLabelConverter (com.cardiomood.android.controls.gauge.SpeedometerGauge.LabelConverter) 在 SpeedometerGauge 中无法应用于(匿名 com.cardiomood.android.speedometer.SpeedometerView.LabelConverter)

我的相关代码如下所示:

    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));
            }
        });
    }

再一次,这个^^^ 不起作用。我收到了我描述的错误:

setLabelConverter (com.cardiomood.android.controls.gauge.SpeedometerGauge.LabelConverter) 在 SpeedometerGauge 中无法应用(匿名 com.cardiomood.android.speedometer.SpeedometerView.LabelConverter)

如您所见,唯一的区别是包名和类前面的“anonymous”字样。

我尝试了很多方法来解决这个问题,但都没有成功。必须有一些非常简单的方法来解决这个问题,但由于某种原因让我无法理解。我很感激任何意见。

谢谢!

编辑:我想我已经解决了这个问题:

我想我设法解决了这个问题:名称应该是 SpeedometerGauge,而不是 SpeedometerView。

所以正确的代码是:

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

【问题讨论】:

  • '唯一的区别是“匿名”这个词'。不,区别还在于包名:SpeedometerGauge vs SpeedometerView

标签: android inner-classes anonymous


【解决方案1】:

您似乎在实例化 SpeedometerGauge 而不是 SpeedometerView,因此您应该替换

speedometer.setLabelConverter(new SpeedometerView.LabelConverter() {

通过

speedometer.setLabelConverter(new SpeedometerGauge.LabelConverter() {

【讨论】:

    猜你喜欢
    • 2014-07-27
    • 2021-04-27
    • 2023-03-08
    • 2020-07-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-28
    相关资源
    最近更新 更多