【问题标题】:Scope issues in android Developmentandroid开发中的范围问题
【发布时间】:2014-02-24 18:38:27
【问题描述】:

所以我熟悉 OOP 和 java 基础知识。

不过,Android 的一些细微差别仍然让我无法理解。

我现在对我的一些课程的范围有一个真正的问题。这是一个例子:

在我的活动中,我引用了一个名为“Player”的自定义类,玩家可以做很多事情,包括绘制图块和放置图块。

我在我的活动中的 AVAILABLE_TILES 数组中保留了所有未绘制的可用图块的列表。这很重要,因为我在许多不同的情况下都会一直引用该列表。

这是我的问题。

这是我活动中的代码:

    public void setUpPlayers(){
    for (int i = 0; i < players.length; i++) {
        players[i] = new Player(playerNames[i], 6000);
        players[i].drawTile(1); //draw one tile

        //find the ID for the tile just placed
        String tileID = players[i].findTileIdByIndex(0); //first tile in thier tile pool

        players.[i].placeTile(tileID);          

        Log.d(players[i].getName(), tileID);
    }
}

这是“播放器”类的代码:

    public void drawTile(int quantity){

    //repeat for the total number of tiles being drawn
    for (int i = 0; i < quantity; i++) {

        //get a random tile ID from the list of available tiles
        int randomTileIndex = RNG.nextInt(AVAILABLE_TILES.size());
        String randomTileName = AVAILABLE_TILES.get(randomTileIndex);

        //add this tile to the player's pool of tiles
        addPlayerTile(randomTileName);

        Log.d("AVAILABLE_TILE_REMOVED", String.valueOf(randomTileIndex));

        //and remove that tile now from the available tiles list
        AVAILABLE_TILES.remove(randomTileIndex);            
    }
}

如您所见,我有一个 ArrayList,其中包含每个可用图块的 ID。 (不在任何玩家池中,也不在棋盘上。)

问题是,由于 ArrayList 在活动中,我似乎无法在 Player.java 中引用它。

需要在Player.java中导入一些android相关的库吗?

在另一种情况下,我制作了一个自定义类“Tile”的数组,它扩展了 Button,并且在引用活动中的全局(静态)变量时没有问题。

那么解决办法是什么?

提前感谢您的帮助,

JRad

【问题讨论】:

    标签: java android class scope


    【解决方案1】:

    Activity 中 AVAILABLE_TILES 的可见性可能是您的问题

    【讨论】:

    • 想详细说明一下? AVAILABLE_TILES 设置为 public static
    【解决方案2】:

    我现在想通了。

    我需要以“静态方式”引用数组。含义如下格式:

    [ClassNameTheHoldsTheArray].ArrayName

    所以在这种情况下,我必须使用引用 GameBoardActivity.AVAILABLE_TILES

    感谢大家的帮助。

    JRad

    【讨论】:

    • Stack Overflow 说我必须等 2 天才能接受。
    【解决方案3】:

    修改您的Player 构造函数以将对您的活动的引用作为参数。在构造函数中,设置您的活动类类型的变量(例如MyActivity mActivity),该变量在您的Player 类中定义为等于此参数。现在,当您需要访问AVAILABLE_TILES 时,请通过mActivity.AVAILABLE_TILES 访问它。

    编辑 以上假设AVAILABLE_TILES 不是静态的。如果是,只需适当地限定它,例如MyClass.AVAILABLE_TILES.

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-24
      • 2017-06-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多