簡體   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