0

次の問題が頭を悩ませています。Button(askButton)をクリックした後にランダムな配列を表示するTextViewを作成しました。2 番目の Button(rstButton) はリセット ボタンとして機能し、テキストからすべてのフィールドをクリアすることになっています。これを実現するために、setText("")メソッドを使用しました。すべてのフィールドを正常にクリアします。

私の問題は、上記の TextView をクリアして Button(askButton) をクリックした後、TextView のコンテンツがランダムではなくなり、同じ配列が何度も表示されることです。私は一日中さまざまなサイトで解決策を探していましたが、成功しませんでした.

 String ansArray[] = { "yes","no", "Surely","Never"}; 
    final Random random = new Random();                                         
    final int select = random.nextInt(ansArray.length);
    final TextView ansText = (TextView) findViewById(R.id.textView1); 
    Button buttonAsk = (Button) findViewById(R.id.button1); 
    buttonAsk.setOnClickListener(new Button.OnClickListener() {
        public void onClick(View v) {

        ansText.setText(ansArray[select]);   

「final」修飾子により配列を変更できなくなると思いますが、配列を final として宣言しないとエラーが発生し、final 修飾子が要求されます (ここに問題があると思います)。

コードの 2 番目の部分には、リセット ボタンが含まれています。

final EditText questionText = (EditText) findViewById(R.id.editText1);
    ImageButton btnReset = (ImageButton) findViewById(R.id.imageButton1);
    btnReset.setOnClickListener(new ImageButton.OnClickListener(){
        public void onClick(View v){
           questionText.setText("");
            ansText.setText("");

    }
});

私の問題は final 修飾子にありますか、それとも何か間違っていますか? 助けていただければ幸いです。前もって感謝します!

4

2 に答える 2

0

この番号を生成するのは 1 回だけです。onClick リスナーの外側にある int select を取り除きます。

final TextView ansText = (TextView) findViewById(R.id.textView1); 
Button buttonAsk = (Button) findViewById(R.id.button1); 
buttonAsk.setOnClickListener(new Button.OnClickListener() {
    public void onClick(View v) {
        int select = random.nextInt(ansArray.length);
        ansText.setText(ansArray[select]); 

以前に行ったことは、乱数を 1 回だけ取得することでした。onClick 内で乱数が生成されるため、新しいクリックごとに新しい乱数が取得されます。

于 2013-05-30T00:50:40.970 に答える
0

「最終」修飾子を削除してみてください:

final Random random = new Random();                                         
final int select = random.nextInt(ansArray.length);

これらのコードは、アプリケーションを実行するたびに常に単一の値を生成します。

幸運を祈ります^^

于 2013-05-30T00:30:46.513 に答える