我正在制作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,所以这可能是一个有点无聊的问题。
答案 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);