繁体   English   中英

将值传递给另一个类

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

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM