[英]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.