使用OnClick方法更改数组的长度

时间:2017-05-05 19:55:17

标签: java android

我正在制作Android钢琴应用程序(我的第一个),这是我的问题。 我想通过按特定按钮来更改钢琴键的数量。 键被声明为数组

Button[] whiteKeys = new Button[8];

对于我使用View.OnClickListener

的键
View.OnClickListener btnClicked = new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        switch(v.getId())
        {
            case 1:
                 //Here I want to change the length of my whiteKeys array from 8 to 16}  

我该怎么做?我完全不熟悉Java,所以这可能是一个有点无聊的问题。

3 个答案:

答案 0 :(得分:3)

在Java中,有一个名为ArrayList的东西。它提供了像数组或列表一样访问它的方法。所以添加一个键只是list.add(key)或list.add(index,key),用list.remove(list.size() - 1)删除,然后用list.get(key_number)获取。

当然,您也可以将键阵列初始化为MAX_KEYS(其中MAX_KEYS是您为键盘上允许的大多数键定义的常量,然后您只需跟踪哪些键可见)

P.S。
您可能还想熟悉同步关键字。在您的示例中,您并不严格需要它,但ArrayList不是线程安全的。 (所以发送垃圾邮件可能会导致奇怪的事情)

答案 1 :(得分:1)

如果您不想使用ArrayList,您仍然可以使用数组执行此操作。

一个明显的尝试是:

whiteKeys = new Button[16];

现在你的数组有16个元素。问题是你刚刚清除旧数组中的任何内容。为了防止这种情况,我们可以先将其复制到一个新数组。所以相反,你会这样做:

Button[] temp = new Button[16];
System.arraycopy(whiteKeys, 0, temp, 0, whiteKeys.length);
whiteKeys = temp;

答案 2 :(得分:0)

Java中的数组大小是固定的,因此您必须声明一个新数组或使用像ArrayList这样的动态结构。使用ArrayList,您可以拨打.get(index).add(newButton).remove(index)

确保在主线程中添加新的按钮。在这种情况下,您的public void onClick(View v)正在主线程中运行,但为了获得更好的性能,您还可以从头开始添加所有钢琴键并仅修改可见性:

pianoKey.setVisibility(View.VISIBLE);
pianoKey.setVisibility(View.INVISIBLE);