将值传递给另一个类

时间:2015-05-05 20:24:54

标签: java android

我正在开发一款在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()的最佳方式是什么?

3 个答案:

答案 0 :(得分:0)

你应该创建一个新界面

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);

答案 1 :(得分:0)

来吧,让最后的快乐。 'final'并不意味着你无法改变对象内的值;它只意味着你不能替换对象本身。回想一下Java传递对象作为它们的参考值 - 使操纵杆最终只是意味着你不能用另一个实例替换它。

答案 2 :(得分:0)

您可以实现回调函数。

见这里: Callback functions in Java 和这里: How do I perform a JAVA callback between classes?