2014-03-05 67 views
0

我需要將我主要活動的值傳遞給自定義視圖。從活動傳遞值到自定義視圖

在主要活動中,我有一個SensorEventListener,因此我不斷收聽光線傳感器。在onSensorChanged()方法中,我讀取了該值,並且每次更改爲我的自定義View時都需要發送此值。

我不知道哪個是實現此目的的最佳方法。

更新 -

方法refered到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(); 
} 

我不能用靜態參考原因然後我不能稱爲無效()

+0

您是否試圖從一項活動轉到另一項活動?或者你還在你的主要活動?一些代碼會有幫助。 –

+0

@William Riley他們是2個不同的班級。一個是活動,另一個是擴展視圖的自定義視圖 – masmic

+0

林不知道下面的答案是否足夠清楚。如果沒有,請發佈您的onSensorChange()方法,我將編輯爲更具體。 –

回答

0

沒有看到你的任何代碼,我可以給出的最好的建議是在你的視圖中創建一個屬性,並使其可以從你的主要活動類訪問。在檢查傳感器的方法中,您可以簡單地將您創建的自定義視圖的屬性設置爲值。並不是像直接訪問它那樣傳遞價值。

假設你的價值是浮動,加上這樣的事情您的自定義視圖類:

public float sensorValue; 

訪問它從傳感器事件偵聽器是這樣的:

CustomView.sensorValue = sensorValue; 
+0

我已經更新了主帖以便更具體一點 – masmic

3

你可以這樣做:

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 
    } 
} 
+0

This要求我將setValues()方法設爲靜態。我更新了主文章 – masmic

+0

你可以完美地從setter調用invalidate() – Daniel

+0

好吧,我正在嘗試這樣做,它說我不能從類型視圖中對非靜態方法invalidate()進行靜態引用。 – masmic

相關問題