не могу случайно установить новую кнопку с Java - PullRequest
1 голос
/ 18 марта 2012

я пытаюсь заставить свои кнопки измениться на другое изображение и набор законов это алфавитное приложение, которое у меня в данный момент работает и находится на рынке .... я хочу, чтобы оно произвольно меняло картинку, а затем следовало за алфавитом по всей программе, но я не могу понять, как заставить кнопки рандомизироваться так, вот основной код, который я использую

пакет com.alphafree;

import java.util.Random;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.Intent;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;

public class letterA extends Activity implements OnClickListener {
    /** Called when the activity is first created. */
    private MediaPlayer mp;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        int[] _26Num = new int[6];
        int i, number;

        Random r1 = new Random(); // Random generator
        for (i = 1; i < _26Num.length; i++) { // Pick 6 Random Numbers
            do {
                number = (int) (r1.nextDouble() * 26);
                _26Num[1] = 1;
            } while (!(number != 0 && number != _26Num[1]
                    && number != _26Num[2] && number != _26Num[3]
                    && number != _26Num[4] && number != _26Num[5]));
            _26Num[i] = number;
        }

        // defines the buttons
        View but1 = findViewById(R.id.let1);
        View but2 = findViewById(R.id.let2);
        View but3 = findViewById(R.id.let3);
        View but4 = findViewById(R.id.let4);
        View but5 = findViewById(R.id.let5);

        but1.setOnClickListener(this);
        but2.setOnClickListener(this);
        but3.setOnClickListener(this);
        but4.setOnClickListener(this);
        but5.setOnClickListener(this);

        // set the random content view
        int random = (int) Math.ceil(Math.random() * 5);
        if (random == 1) {
            setContentView(R.layout.letter1a);

        } else if (random == 2) {
            setContentView(R.layout.letter1a);

        } else if (random == 3) {
            setContentView(R.layout.letter1a);

        } else if (random == 4) {
            setContentView(R.layout.letter1a);

        } else if (random == 5) {
            setContentView(R.layout.letter1a);

        }

        // here is were i need to set up the buttons
        if (_26Num[1] == 1) {

            let1.setBackgroundResource(R.drawable.let_a);

        } else if (_26Num[1] == 2) {
            setContentView(R.layout.letter1a);

        } 


    }

    public void onClick(View v) {

        if (mp != null)
            mp.release();

        switch (v.getId()) {

        case R.id.let1:

            mp = MediaPlayer.create(this, R.raw.correct);
            {
                new AlertDialog.Builder(this)
                        .setTitle("Y A Y!!!!   Y O U R    R I G H T")
                        .setMessage(
                                "Thats the letter      'A'                  You Chose Correct")
                        .setNeutralButton("Done", null).show();
                startActivity(new Intent("com.alphafree.LETTERB"));

            }
            break;

        }
        mp.seekTo(0);
        mp.start();
    }

}

Ответы [ 2 ]

1 голос
/ 18 марта 2012

Вы можете сделать это следующим образом:

private static final int[] num2DrawableMap = new int[] {
    R.drawable.letterA,
    R.drawable.letterB,
    // etc
};

private static final int[] num2LayoutMap = new int[] {
    R.layout.layoutA,
    R.layout.layoutB,
    // etc
};

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    int[] _26Num = new int[6];
    int i, number;

    Random r1 = new Random(); // Random generator
    for (i = 1; i < _26Num.length; i++) { // Pick 6 Random Numbers
        do {
            // don't you like r1.nextInt(26) ?
            number = (int) (r1.nextDouble() * 26);
            // always 1? why in that loop?
            _26Num[1] = 1;
        } while (!(number != 0 && number != _26Num[1]
                && number != _26Num[2] && number != _26Num[3]
                && number != _26Num[4] && number != _26Num[5]));
        _26Num[i] = number;
    }

    // set the random content view
    int random = r1.nextInt(num2LayoutMap.size);
    setContentView(num2LayoutMap[random]);

    // find the buttons
    View[] buts = new View[5];
    buts[0] = findViewById(R.id.let1);
    buts[1] = findViewById(R.id.let2);
    buts[2] = findViewById(R.id.let3);
    buts[3] = findViewById(R.id.let4);
    buts[4] = findViewById(R.id.let5);

    for (View but : buts) {
        but.setOnClickListener(this);
        int drawableId = num2DrawableMap[_26Num[i]];
        but.setBackgroundResource(drawableId);
    }
}

Но: кнопки должны быть внутри каждого из ваших файлов layout.xml и иметь одинаковый идентификатор. Иначе вы их не найдете. Также вам нужно setContentView(), прежде чем вы сможете использовать findViewById()

0 голосов
/ 18 марта 2012

Кроме setContentView каждый раз, вы можете добавлять все одновременно и сохранять их видимость в GONE.что бы кнопка не отображалась, просто сделайте ее видимой для VISIBLE.Если вы хотите изменить, сделайте Previous на GONE и сделайте новый VISIBLE.

...