java - 使两个子视图中的对象相等
问题描述
我有两个视图类,HitOrMiss
和PlaceShips
,扩展一个类,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);
}
解决方案
事实证明,mGame
答案是使用 setter 和 getter 方法,并在活动中将 HitOrMiss 的 mGame 设置为 PlacedShips 的 mGame。在任何一个子类中这样做都行不通。
事实证明,我创建侦听器的方式是错误的,这没有帮助。
推荐阅读
- python - 使用 Numpy 的数值系列
- python - 可以在 vaex 数据框上使用功能工具吗?
- javascript - 检测何时在 WKWebView 中按下按钮
- python - os.path.getmtime 将来返回值
- python - 一一点击多个xpath
- ios - 低质量的 TabBarItem 图像
- javascript - 为什么一个组件中不能有多个父元素?
- ansible - Ansible Vault - 用于生产和测试的相同 Git 存储库
- node.js - Docker Compose - ECS TaskFailedToStart:CannotPullContainerError:检查图像已重试 1 次
- python - 在 Python 中创建“引擎”对象后如何读取/查询 SQL 表?