簡體   English   中英

如何在 Android Studio 中隨機化我的按鈕?

[英]How can I randomize my buttons in Android Studio?

我正在做一個多項選擇測驗,我想讓我的按鈕的位置隨機,你會怎么做? 正如您在下面的代碼中看到的那樣,我已經制作了多個帶有問題的數組,但我不知道我是否可以保留我的代碼並進行一些修改,或者我是否必須全部重寫以使按鈕隨機.

謝謝你的幫助,真的。

這是我的代碼:

public class QuizActivity extends AppCompatActivity {

ImageView mImageView;
TextView mTextView;
TextView mAnswer;
TextView score;
TextView countDown;
RadioGroup radioGroup;
RadioButton opt1;
RadioButton opt2;
RadioButton opt3;
RadioButton opt4;
Button check;

boolean answered = false;


public static final long COUNTDOWN_IN_MILLISECODS = 30000;
public CountDownTimer countDownTimer;
public long timeLeftInMilliseconds;

private ColorStateList textColorDefaultCd;
private ColorStateList textColorDefaultRb;

int scoreNumber = 0;
int questionNumber = 0;
int questionNumberTotal = 9;
int arrayNumber = -1;


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

    mImageView = findViewById(R.id.imageView);
    mTextView = findViewById(R.id.tvQ);
    mAnswer = findViewById(R.id.tvA);
    score = findViewById(R.id.tvScore);
    countDown = findViewById(R.id.tvCd);
    opt1 = findViewById(R.id.rb1);
    opt2 = findViewById(R.id.rb2);
    opt3 = findViewById(R.id.rb3);
    opt4 = findViewById(R.id.rb4);
    check = findViewById(R.id.btnCheck);
    radioGroup = findViewById(R.id.rG);

    textColorDefaultRb = opt1.getTextColors();

    textColorDefaultCd = countDown.getTextColors();

    shuffleQuestions();
    ShowNewQuestion();
    StartCountDown();

    check.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            check.setText("Bestätigen");
            if (!answered) {
                if (opt1.isChecked() || opt2.isChecked() || opt3.isChecked() || opt4.isChecked()) {
                    CheckAnswer();
                    countDownTimer.cancel();
                    answered = true;
                } else {
                    Toast.makeText(QuizActivity.this, "Wählen Sie eine Antwort aus", Toast.LENGTH_LONG).show();
                }
            } else if (answered) {
                ShowNewQuestion();
                StartCountDown();
                answered = false;
            }
        }

    });
}


Objects q01 = new Objects(R.drawable.blauwahl, "Das Herz eines Blauwals ist ungefähr so groß wie...", "ein VW-Käfer", "Angela Merkels Privatjet", "ein VW-Käfer", "eine Vespa", "eine Wassermelone");
Objects q02 = new Objects(R.drawable.simbabwe, "Der südafrikanische Staat Simbabwe wurde 1980 unabhängig. Wie hieß das Land früher? ", "Rhodesien", "Botswana", "Rhodesien", "Südafrika", "Botsuana");
Objects q03 = new Objects(R.drawable.sonnenkoenig, " Der französische Sonnenkönig Ludwig XIV. herrschte lange Jahre über Frankreich. Wie viele? ", "72", "22", "52", "62", "72");
Objects q04 = new Objects(R.drawable.tempelberg, "Der Tempelberg in Jerusalem ist rund 144.000 Quadratmeter groß und beladen mit Mythen. Wer soll hier den ersten Mord der Menschheit begangen haben?", "Kain", "David", "Kain", "Herodes", "Joseph");
Objects q05 = new Objects(R.drawable.frauenkirche, "In welchem Jahr des Zweiten Weltkrieges wurde die Dresdener Frauenkirche zerstört? ", "1945", "1943", "1944", "1945", "1939");
Objects q06 = new Objects(R.drawable.kueste, "Welches dieser europäischen Länder hat die längste Küste?", "Griechenland", "Italien", "Griechenland", "Frankreich", "Türkei");
Objects q07 = new Objects(R.drawable.umriss, "Der Umriss welches inselreichen Landes ist hier zu sehen?", "Dänemark", "Dänemark", "Philippinen", "Kroatien", "Griechenland");
Objects q08 = new Objects(R.drawable.blitz, "Woran liegt es, dass man den Donner bei manchen Blitzen erst viel später hört als bei anderen?", "An der unterschiedlichen Entfernung der Blitze", "An der unterschiedlichen Entfernung der Blitze", "An der Stärke der elektrischen Entladungen", "An der Dichte des Regens", "An den heftigen Windböen");
Objects q09 = new Objects(R.drawable.biathlon, "Aus welchen beiden Disziplinen setzt sich ein Biathlon zuammen?", "Sportschießen und Skilanglauf", "Sportschießen und Skilanglauf", " Skispringen und Skilanglauf ", " Skilanglauf und Abfahrtslauf ", "Abfahrtslauf und Skispringen ");
Objects q10 = new Objects(R.drawable.licht, "In welcher physikalischen Einheit wird die Lichtstärke gemessen?", "Candela", "Joule", "Lumen", "Lux", "Candela");
Objects q11 = new Objects(R.drawable.sonne, "Welcher Planet unseres Sonnensystems ist am weitesten von der Sonne entfernt?", "Neptun", "Uranus", "Jupiter", "Neptun", "Saturn");

Objects[] objectsArray = new Objects[]{
        q01, q02, q03, q04, q05, q06, q07, q08, q09, q10, q11
};

public void shuffleQuestions() {

    Collections.shuffle(Arrays.asList(objectsArray));
}

public void ShowNewQuestion() {
    if (questionNumber < questionNumberTotal) {

        opt1.setTextColor(textColorDefaultRb);
        opt2.setTextColor(textColorDefaultRb);
        opt3.setTextColor(textColorDefaultRb);
        opt4.setTextColor(textColorDefaultRb);

        radioGroup.clearCheck();
        answered = false;

        arrayNumber++;

        mTextView.setText(objectsArray[arrayNumber].getmQuestion());
        mImageView.setImageResource(objectsArray[arrayNumber].getmImages());
        opt1.setText(objectsArray[arrayNumber].getmOption1());
        opt2.setText(objectsArray[arrayNumber].getmOption2());
        opt3.setText(objectsArray[arrayNumber].getmOption3());
        opt4.setText(objectsArray[arrayNumber].getmOption4());
        mAnswer.setText(objectsArray[arrayNumber].getmAnswer());

        timeLeftInMilliseconds = COUNTDOWN_IN_MILLISECODS;
    } else {
        FinishQuiz();
    }
}




    if (opt1.isChecked()) {
        if (opt1.getText().equals(mAnswer.getText())) {
            scoreNumber++;
            questionNumber++;
            UpdateScore();
            countDownTimer.cancel();

        }

    } else if (opt2.isChecked()) {
        if (opt2.getText().equals(mAnswer.getText())) {
            scoreNumber++;
            questionNumber++;
            UpdateScore();
            countDownTimer.cancel();

        }

    }
    if (opt3.isChecked()) {
        if (opt3.getText().equals(mAnswer.getText())) {
            scoreNumber++;
            questionNumber++;
            UpdateScore();
            countDownTimer.cancel();

        }

    }
    else if (opt4.isChecked()) {
        if (opt4.getText().equals(mAnswer.getText())) {
            scoreNumber++;
            questionNumber++;
            UpdateScore();
            countDownTimer.cancel();

        } else {
            questionNumber++;
            countDownTimer.cancel();
        }
    }

我在這里存儲對象:

public class Objects {

public int mImages;
public String mQuestion;
public String mAnswer;
public String mOption1;
public String mOption2;
public String mOption3;
public String mOption4;


public Objects(int mImages, String mQuestion, String mAnswer, String mOption1, String mOption2, String mOption3, String mOption4) {
    this.mImages = mImages;
    this.mQuestion = mQuestion;
    this.mAnswer = mAnswer;
    this.mOption1 = mOption1;
    this.mOption2 = mOption2;
    this.mOption3 = mOption3;
    this.mOption4 = mOption4;
    this.mAnswer = mAnswer;

}

public int getmImages() {

    return mImages;
}

public String getmQuestion() {
    return mQuestion;
}

public String getmAnswer() {
    return mAnswer;
}

public String getmOption1() {

    return mOption1;
}

public String getmOption2() {

    return mOption2;
}

public String getmOption3() {

    return mOption3;
}

public String getmOption4() {

    return mOption4;
}

}

由於您的答案似乎在數組的末尾,並且每個問題都有四個單獨的可能答案,您可以嘗試以下示例:

String[] a01 = {"Angela Merkels Privatjet", "ein VW-Käfer", "eine Vespa", "eine Wassermelone};


Collections.shuffle(Arrays.asList(a01));

然后更改您的 Objects 類以接受 String[] 代替最后四個 String,並將類屬性設置為等於數組值,反之亦然,使用數組 String 值聲明對象參數。

例如

Objects q01 = new Objects(R.drawable.blauwahl, "Das Herz eines Blauwals ist ungefähr so groß wie...", "ein VW-Käfer", a01[0], a01[1], a01[2], a01[3]);

或者

Objects q01 = new Objects(R.drawable.blauwahl, "Das Herz eines Blauwals ist ungefähr so groß wie...", "ein VW-Käfer", a01);

如果這樣做,您需要在 onCreate 方法中聲明一些引用,並在最終將它們加載到您的 Objects[] 對象之前,遍歷混洗過程,然后創建或分配 Objects 對象。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM