首页 > 解决方案 > 使两个子视图中的对象相等

问题描述

我有两个视图类,HitOrMissPlaceShips,扩展一个类,BuildGame。BuildGame 有一个对象,mGame. 在运行时创建了 2 个 mGame 实例,每个子类一个。mGame 包含一个监听器列表,但 HitOrMiss 和 PlaceShips 仅将它们的监听器添加到它们自己的 mGame 实例中。因此,只有当您点击该特定视图时,各个视图才会更新。

本质上,我试图将其中一个视图的 mGame 设置为另一个视图的 mGame,这样只会更新对同一对象的引用,但我不知道怎么做!将 mGame 设置为static确实有效,但是,我的本单元讲师说还有另一种不使用静态的方法,我会失去分数,这很公平。

构建游戏:

public class BuildGame extends View {
protected final BaseSubClass mGame = new BaseSubClass(10, 10, BattleshipGameBase.ShipData.CREATOR.newArray(5));
private Paint mGridPaint, mPlayer1Paint, mPlayer2Paint, mBGPaint, mHitPaint, mMissPaint;
protected float diameterX, diameterY, chosenDiameter, separatorSize, canvasWidth, canvasHeight;
protected int tokenAtPos;

public BuildGame(Context context, AttributeSet attrs) {
    super(context, attrs);
    initialise();
}

除了名称之外,PlacedShips 和 HitOrMiss 基本上是相同的片段:

public class PlaceShips extends BuildGame {

private GestureDetector mGestureDetector;
private int placedShipNo = 0;

public PlaceShips(Context context, AttributeSet attrs) {
    super(context, attrs);
    mGestureDetector = new GestureDetector(context, new MyGestureListener());

    //GameplayListenerStuff
    BattleshipGameBase.BattleshipGameListener mGameplayListenerPS = new BattleshipGameBase.BattleshipGameListener() {
        @Override
        public void onGameChanged(BattleshipGameBase game, int column, int row) {
            System.out.println("onGameChangedPS");
            invalidate();
        }
    };
    mGame.addOnGameChangeListener(mGameplayListenerPS);
}

标签: javaandroid

解决方案


事实证明,mGame答案是使用 setter 和 getter 方法,并在活动中将 HitOrMiss 的 mGame 设置为 PlacedShips 的 mGame。在任何一个子类中这样做都行不通。

事实证明,我创建侦听器的方式是错误的,这没有帮助。


推荐阅读