Android 将值从活动传递到自定义视图

Android 将值从活动传递到自定义视图,android,view,sensors,Android,View,Sensors,我需要将值从主活动传递到自定义视图 在主要活动中,我有一个SensorEventListener,所以我会继续收听光传感器。在onSensorChanged()方法中,我读取该值,每次它更改到我的自定义视图时,我都需要发送该值 我不知道实现这一目标的最佳方法是什么 更新-- 在主活动上引用SensorEventListener的方法: @Override public void onSensorChanged(SensorEvent event) { float lumnes = eve

我需要将值从主活动传递到自定义视图

在主要活动中,我有一个SensorEventListener,所以我会继续收听光传感器。在onSensorChanged()方法中,我读取该值,每次它更改到我的自定义视图时,我都需要发送该值

我不知道实现这一目标的最佳方法是什么

更新--

在主活动上引用SensorEventListener的方法:

@Override
public void onSensorChanged(SensorEvent event) {
    float lumnes = event.values[0];
    GaugeView.setHandTarget(lumnes);
}
我必须在自定义视图中将值发送到的方法:

public void setHandTarget(float temperature) {
    if (temperature < minDegrees) {
        temperature = minDegrees;
    } else if (temperature > maxDegrees) {
        temperature = maxDegrees;
    }
    handTarget = temperature;
    handInitialized = true;
    invalidate();
}
public void setHandTarget(浮动温度){
if(温度<摄氏度){
温度=minDegrees;
}否则,如果(温度>最大度){
温度=最大温度;
}
手动目标=温度;
handInitialized=true;
使无效();
}

我不能使用静态引用,因为我不能调用invalidate()

而看不到任何代码,我能给出的最好建议是在视图中创建一个属性,并使它可以从主活动类访问。在检查传感器的方法中,只需将创建的自定义视图属性设置为值。与其说传递值,不如说直接访问它

假设您的值是一个float,请向自定义视图类中添加如下内容:

public float sensorValue;
从传感器事件侦听器访问它,如下所示:

CustomView.sensorValue = sensorValue;

在没有看到任何代码的情况下,我能给出的最好建议是在视图中创建一个属性,并使其可以从主活动类访问。在检查传感器的方法中,只需将创建的自定义视图属性设置为值。与其说传递值,不如说直接访问它

假设您的值是一个float,请向自定义视图类中添加如下内容:

public float sensorValue;
从传感器事件侦听器访问它,如下所示:

CustomView.sensorValue = sensorValue;
您可以这样做:

public CustomView extends View {
  ...
  private float[] values; //this 

  //setter
  public void setValues(float[] values) {
    this.values = values;
  }

}


public class MyActivity extends Activity implements SensorEventListener {

 private CustomView mCustomView;
 ...
    @Override
    public void onSensorChanged(SensorEvent event) {
        float[] values = event.values;
        mCustomView.setValues(values);    //pass the collected values to the view via setter
    }
}
您可以这样做:

public CustomView extends View {
  ...
  private float[] values; //this 

  //setter
  public void setValues(float[] values) {
    this.values = values;
  }

}


public class MyActivity extends Activity implements SensorEventListener {

 private CustomView mCustomView;
 ...
    @Override
    public void onSensorChanged(SensorEvent event) {
        float[] values = event.values;
        mCustomView.setValues(values);    //pass the collected values to the view via setter
    }
}


您是否试图从一个活动转移到另一个活动?还是你还在做你的主要活动?有些代码可能会有帮助。@William Riley他们是两个不同的类。一个是活动,另一个是扩展视图的自定义视图我不确定下面的答案是否足够清楚。如果没有,请发布您的onSensorChange()方法,我将进行更具体的编辑。您的代码到底有什么问题?它应该设置值,就像你写的那样。有一个错误你可以分享吗?@William Riley,它要求我将setHandTarget()方法设为静态,但我不能这样做,因为这样我就不能调用invalidate()方法。你是否试图从一个活动传递到另一个活动?还是你还在做你的主要活动?有些代码可能会有帮助。@William Riley他们是两个不同的类。一个是活动,另一个是扩展视图的自定义视图我不确定下面的答案是否足够清楚。如果没有,请发布您的onSensorChange()方法,我将进行更具体的编辑。您的代码到底有什么问题?它应该设置值,就像你写的那样。有一个错误你可以分享吗?@William Riley嗯,它要求我将setHandTarget()方法设为静态,但我不能这样做,因为这样我就不能调用invalidate()方法。这要求我将setValues()方法设为静态。我更新了主postYou can call invalidate()(可以从setter调用)很好,我正在尝试这样做,它说我
无法从类型视图中静态引用非静态方法invalidate()
抱歉,但是,为什么要将setter设置为静态?。请注意,invalidate()会重新绘制视图的实例,这就是为什么从静态方法调用它无效。这要求我将setValues()方法设置为静态。我更新了主postYou can call invalidate()(可以从setter调用)很好,我正在尝试这样做,它说我
无法从类型视图中静态引用非静态方法invalidate()
抱歉,但是,为什么要将setter设置为静态?。请注意,invalidate()会重新绘制视图的实例,这就是为什么从静态方法调用它无效的原因我已将main post更新为更具体一点我已将main post更新为更具体一点