1

5つのサイコロのリソースを設定するループを作成しようとしています。コードの最後の行の「imgBtnName」をいずれかのサイコロ名(「dice1」など)に変更しても、行はエラーになりません。ただし、forループに合うように名前を連結しようとすると、 setImageesourceでの次のエラー通知:

エラー

The method setImageResource(int) is undefined for the type String

何か案は?「intid」行に似た構文が欠落しているように感じます。

コード

public void PlayGame()  
    {  
        dice1 = (ImageButton)findViewById(R.id.btndice1);  
        dice2 = (ImageButton)findViewById(R.id.btndice2); 
        dice3 = (ImageButton)findViewById(R.id.btndice3); 
        dice4 = (ImageButton)findViewById(R.id.btndice4); 
        dice5 = (ImageButton)findViewById(R.id.btndice5);



        begin = (Button)findViewById(R.id.btnroll);
        roll = (Button)findViewById(R.id.btnbegin);

        begin.setOnClickListener(new View.OnClickListener(){
            @Override
            public void onClick(View v) {
                Random rand = new Random();     

                for (int i = 0; i < 6; i = i + 1) {
                    int rndInt = rand.nextInt(6) + 1; // Random number between 1 and 6                  
                    String imgBtnName = "dice" + (i + 1);
                    String imgName = "die" + rndInt;                    
                    int id = getResources().getIdentifier(imgName, "drawable", getPackageName());

                    imgBtnName.setImageResource(id);  //trying use the imgButnName string to set dice1, dice2, dice3 etc to set the imagebutton resource
                }



            }
        });  
    }  
4

2 に答える 2

3

ImageViewsをアリーで包み、それらの周りをループします

    dice1 = (ImageButton)findViewById(R.id.btndice1);  
    dice2 = (ImageButton)findViewById(R.id.btndice2); 
    dice3 = (ImageButton)findViewById(R.id.btndice3); 
    dice4 = (ImageButton)findViewById(R.id.btndice4); 
    dice5 = (ImageButton)findViewById(R.id.btndice5);

    ImageButton[] dice = new ImageButton[5]{dice1, dice2, dice3, dice4, dice5};

    for (int i = 0; i < dice.length; i++) {
         int id = R.drawable.ic_launcher;
         dice[i].setImageResource(id);
    }
于 2012-06-10T19:18:34.653 に答える
2

imgBtnName.setImageResource(id);

Stringクラスにはメソッドがないと確信していsetImageResource(...)ます。;)

つまり、画像リソースIDを、の1つではなく、文字列に変換しようとしていますImageButton。たとえばdice1 ... dice5、配列内にあると想定されているので、forループでそれらを反復処理して、次のように呼び出すことができますdice[i].setImageResource(id)

于 2012-06-10T19:18:42.413 に答える