[英]Passing a value to another class
我正在開發在MainActivity
上具有操縱桿的應用程序。 操縱桿是一個自定義視圖,並具有一個Joystick類。 當用戶觸摸並移動操縱桿時,我希望將Y軸值發送到MainActivity
以便可以使用該值。
在Joystick.java中,我有一個onTouch()
偵聽器。 觸摸時,操縱桿將產生坐標(操縱桿的X和Y),這樣我就可以在Y軸上獲得從-100到100的值。
public class Joystick extends View implements OnTouchListener{
int xAxis, yAxis;
public int getYAxis(){
return yAxis;
}
@Override
public boolean onTouch(View arg0, MotionEvent event){
// Code to process event and assign xAxis and yAxis values (-100, 100)
}
}
在MainActivity
我嘗試執行以下操作以獲取yAxis
值:
@Override
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// ... other code
Joystick joy = (Joystick) findViewById(R.id.joystick1);
joy.setOnTouchListener(new View.OnTouchListener(){
@Override
public boolean onTouch(View v, MotionEvent event){
// updateMotorControl() is the funcion I need to pass my value to
updateMotorControl(joy.getYAxis(), 0);
return true;
}
}
但是,當然,AndroidStudio告訴我,需要將joy
聲明為最終的。 問題在於,如果是最終版本,我將永遠無法更新該值。
我已經嘗試了上百萬種方法,並且不斷出現類似的錯誤。 我不是在問為什么我會收到該錯誤。 我想知道的是將該值傳遞給MainActivity
並依次傳遞給updateMotorControl()
的最佳方法是什么?
您應該創建一個新界面
public interface DataCallback {
/**
* This method is called when xAxis and yAxis change.
* @param instance
*/
void dataIsAvailableNow(int x, int y);
}
在操縱桿中添加一個DataCallback字段:
public class Joystick extends View implements OnTouchListener{
int xAxis, yAxis;
DataCallback mCallback;
public int getYAxis(){
return yAxis;
}
public void setCallback(DataCallback callback) {
this.mCallback = callback;
}
@Override
public boolean onTouch(View arg0, MotionEvent event){
// Code to process event and assign xAxis and yAxis values (-100, 100)
if (mCallback != null) {
mCallback.dataIsAvailableNow(-100,100);
}
}
}
並在MainActivity中實現接口並設置偵聽器
joy.setCallback(this);
繼續前進,使歡樂最終化。 “最終”並不意味着您無法更改對象內部的值; 這僅意味着您不能替換對象本身。 回想一下,Java將對象作為參考值傳遞給對象-將操縱桿定為最終對象僅意味着您不能將其替換為另一個實例。
您可以實現一個回調函數。
請參閱此處: Java中的回調函數以及此處: 如何在類之間執行JAVA回調?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.