Android - 通过onClick传递数组

时间:2016-04-28 22:28:44

标签: android

作为我尝试创建记忆游戏的一部分,我在我的布局上放置了12个图像按钮,ID名称为imageButton1 ... imageButton12。我写了一个算法来创建一个名为cards [12]的数组,其中随机值代表哪个卡(card1..card6)位于每个imageButton后面,例如,如果cards [5] = 4,那么imageButton6后面的卡就是card4。 现在,我试图告诉程序在使用数组单击imageButton时显示appropraite卡。我是android studio的新手,据我所知,我首先需要在所有按钮上使用OnClickListener,所以我使用循环完成它。到目前为止,这是我的代码:

public class Memory extends AppCompatActivity implements OnClickListener{

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_memory);

        int i;
        int[] cards = new int[12];
        // Algorithm here
        for(i=1;i<=12;i++) {
            String name = "imageButton" + i;
            int resID = getResources().getIdentifier(name, "id", "com.amir.supermemory");
            ImageButton btn = (ImageButton) findViewById(resID);
            btn.setOnClickListener(this);
        }

现在出现了onClick功能,该功能执行单击时切换适当图像的操作。问题是我无法将之前创建的数组卡[]传递给函数(它说“无法解析符号'卡'”),我该怎么做?

public void onClick(View v) {
            switch (v.getId()) {
                case R.id.imageButton1:
                    ImageButton b = (ImageButton) findViewById(R.id.imageButton1);
                    String name = "card" + cards[0]; //cards is shown in red
                    int resID = getResources().getIdentifier(name, "drawable", "com.amir.supermemory");
                    b.setImageResource(resID);
                    break;
                //copy paste forr all imageButtons
            }
        }

感谢任何帮助,谢谢!

2 个答案:

答案 0 :(得分:1)

因为您在OnCreate()中本地声明了卡片阵列,所以无法使用其他方法访问它。

您需要做的就是全局声明您的卡片阵列。

public class Memory extends AppCompatActivity implements OnClickListener{

    int[] cards;

    @Override
    protected void onCreate(Bundle savedInstanceState) {

    int i;
    cards = new int[12];
    ...
}

答案 1 :(得分:0)

您已将cards []声明为onCreate方法中的局部变量。请在外面宣布并尝试。

public class Memory extends AppCompatActivity implements OnClickListener{
int[] cards = new int[12];
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_memory);

    int i;
            // Algorithm here
    for(i=1;i<=12;i++) {
        String name = "imageButton" + i;
        int resID = getResources().getIdentifier(name, "id", "com.amir.supermemory");
        ImageButton btn = (ImageButton) findViewById(resID);
        btn.setOnClickListener(this);
    }