0

ListArray を使用して Question オブジェクトから質問を生成するクイズを作成しました。次のようになります。

public class Glavno extends Activity implements OnClickListener {

int score  = 0;

TextView textView1, textView2, textView3, countdown;
Button btn1, btn2, btn3, btn4;

ArrayList<Question> qsts = new ArrayList<Question>();
List<Integer> generated = new ArrayList<Integer>();

ArrayList<String> allAnswers = new ArrayList<String>();

Random rng = new Random();
Question nextQuestion;

Question q1 = new Question(
    "Q1",

    "Correct answer - q1",
    "Wrong answer 1 - q1",
    "Wrong answer 2 - q1",
    "Wrong answer 3 - q1"
    );
Question q2 = new Question(
    "Q2?",

    "Correct answer - q2",
    "Wrong answer 1 - q2",
    "Wrong answer 2 - q2",
    "Wrong answer 3 - q2"
    );
Question q3 = new Question(
    "Q3?",

    "Correct answer - q3"
    "Wrong answer 1 - q3",
    "Wrong answer 2 - q3",
    "Wrong answer 3 - q3"
    );

Question q4 = new Question(
    "Q4?",

    "Correct answer - q4",
    "Wrong answer 1 - q4",
    "Wrong answer 2 - q4",
    "Wrong answer 3 - q4"
    );

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,   WindowManager.LayoutParams.FLAG_FULLSCREEN);

setContentView(R.layout.pitanja);

// ADD THE QUESTIONS IN THE ArrayList qsts

qsts.add(q1);           
qsts.add(q2);
qsts.add(q3);
qsts.add(q4);

textView1 = (TextView) findViewById(R.id.textView1);
textView2 = (TextView) findViewById(R.id.textView2);
textView3 = (TextView) findViewById(R.id.textView3);
countdown = (TextView) findViewById(R.id.countdown);

textView3.setText("Rezultat: " + score);

    btn1 = (Button) findViewById(R.id.btn1);
    btn2 = (Button) findViewById(R.id.btn2);
    btn3 = (Button) findViewById(R.id.btn3);
    btn4 = (Button) findViewById(R.id.btn4);

    btn1.setOnClickListener(this);
    btn2.setOnClickListener(this);
    btn3.setOnClickListener(this);
    btn4.setOnClickListener(this);

generateQuestion();

}

public void generateQuestion(){

    while(true){

        int nxt = rng.nextInt(4);

        if (!generated.contains(nxt)){

            generated.add(nxt);

            nextQuestion = qsts.get(nxt);

            textView1.setText(nextQuestion.questionText);

            allAnswers.add(nextQuestion.correctAnswerText);
            allAnswers.add(nextQuestion.wrongAnswer1);
            allAnswers.add(nextQuestion.wrongAnswer2);
            allAnswers.add(nextQuestion.wrongAnswer3);

            Collections.shuffle(allAnswers);

            btn1.setText(allAnswers.get(0));
            btn2.setText(allAnswers.get(1));
            btn3.setText(allAnswers.get(2));
            btn4.setText(allAnswers.get(3));

            break;
        }
    }
}


@Override
public void onClick(View v) {
    Button b = (Button)v;
    String buttonText = b.getText().toString();

    if(buttonText.equals(nextQuestion.correctAnswerText)) { 

        textView2.setText("TOČNO!");
        textView2.setTextColor(Color.GREEN);
        textView3.setText("Rezultat: " + (score += 10));

        allAnswers.clear();
        generateQuestion();

        return;

    }else{

        textView2.setText("NETOČNO!");
        textView2.setTextColor(Color.RED);
        textView3.setText("Rezultat: " + (score -= 5));

        allAnswers.clear();
        generateQuestion();

        return; 
    }

質問クラス:

package com.matej.hajdukkviz;

public class Question {

String questionText;
String correctAnswerText;       
String wrongAnswer1;
String wrongAnswer2;
String wrongAnswer3;

Question (String qst, String cAns, String wAns1, String wAns2, String wAns3){

    questionText = qst;
    correctAnswerText = cAns;
    wrongAnswer1 = wAns1;
    wrongAnswer2 = wAns2;
    wrongAnswer3 = wAns3;

}
}

ImageView をこの Question クラスに追加できますが、Question オブジェクトに ImageView を表示するにはどうすればよいですか?

4

2 に答える 2

0

URL またはドローアブル (または、すべての画像をリソースとして配信する場合はリソース ID) を含む新しいフィールドを質問クラスに追加できます。次に、その値をImageViewにロードします( pitanjaTextView も定義した layout に追加します)。これにより、そのドローアブルが表示されます。質問クラスを変更しても、ArrayList にはまったく影響しません。


レイアウト内のどこかに ImageView を定義します。おそらく、属性を調整する必要があります。

<ImageView
    android:id="@+id/someimageviewid"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" />

onCreateメソッドで、TextView の場合と同様に、ImageView への参照を取得します。

public class Glavno extends Activity /* ... */ {

  /* ... */

  ImageView someImageViewVariable;

  /* ... */

  @Override
  public void onCreate(/* ... */) {
    /* ... */
    someImageViewVariable = (ImageView) findViewById(R.id.someimageviewid);
    /* ... */
  }

  /* ... */

  protected void loadQuestion(Question question) {
    /* ... */
    someImageViewVariable.setImageResource(question.getDrawableRessource());
    /* ... */
  }

   /* ... */
}

あなたの質問クラスで:

public class Question {

  /* ... */

  private final int drawableRessource;

  /* ... */

  public Question(/* ... */, int drawableRessource) {
    /* ... */
    this.drawableRessource = drawableRessource;
    /* ... */
  }

  /* ... */

  public int getDrawableRessource() {
    return drawableRessource;
  }
}

使用しなかったいくつかのパターンを使用したことに注意してください。クラスの作成後に変更Questionfinalれるべきではないため、フィールドを宣言します(不変インスタンス)。また、パブリック フィールドは使用しませんでしたが、get メソッドを使用しました。インターフェイスや類似のものを操作すると便利です。どちらも機能自体には必要ありませんが、作業がずっと楽になります。

于 2013-08-05T00:35:02.623 に答える