2016-10-19 4 views
0

私は最初のアンドロイドアプリをプログラミングしています。

私はクイズアプリを作成しようとしています。質問がSQLiteデータベースに格納されていますが、これは順番に表示されます。
ユーザは回答(ラジオボタン)の1つを選択し、「次のボタン」をクリックすると次の質問が表示されます。

次のコードは、それぞれの質問を順に表示するアクティビティファイルを示しています。は完全にです。

次のデータベースエントリを表示


ACEActivity(旧、作業バージョン)私が正しいか間違った答えがクリックされた場合には、利用者の即時フィードバックを与えるために別のアクティビティをロードし、この活動の私の新しいバージョンで

public class ACEActivity extends Activity { 
List<Question> quesList; 
int score = 0; 
int qid = 0; 
Question currentQ; 
TextView txtQuestion; 
RadioButton rda, rdb, rdc, rdd; 
Button butNext; 

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

    DatabaseHelper db = new DatabaseHelper(this); 

    quesList = db.getAllACEQuestions(); 
    currentQ = quesList.get(qid); 
    txtQuestion = (TextView)findViewById(R.id.textView); 
    rda = (RadioButton)findViewById(R.id.radio0); 
    rdb = (RadioButton)findViewById(R.id.radio1); 
    rdc = (RadioButton)findViewById(R.id.radio2); 
    rdd = (RadioButton)findViewById(R.id.radio3); 
    butNext = (Button)findViewById(R.id.nextButton); 
    setQuestionView(); 

    butNext.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      RadioGroup grp = (RadioGroup)findViewById(R.id.radioGroup); 
      RadioButton answer = (RadioButton)findViewById(grp.getCheckedRadioButtonId()); 
      Log.d("yourans", currentQ.getANSWER() + " " + answer.getText()); 
      // If the correct answer was clicked display the next question 
      if(currentQ.getANSWER().equals(answer.getText())) { 
       currentQ = quesList.get(qid); 
       setQuestionView(); 
      } 
     } 
    }); 
} 

// Load the next question 
private void setQuestionView() { 
    txtQuestion.setText(currentQ.getQUESTION()); 
    rda.setText(currentQ.getOPTA()); 
    rdb.setText(currentQ.getOPTB()); 
    rdc.setText(currentQ.getOPTC()); 
    rdd.setText(currentQ.getOPTD()); 
    qid++; 
    } 
} 




フィードバックアクティビティを表示した後、私はこのアクティビティに戻り、次の質問を表示したいと思います。

フィードバックアクティビティ(ACECorrectActivity)の質問IDをこのアクティビティ(ACEActivity)に何も成功させずに渡して、これを実行しようとしています。


私はこの問題を解決しようとした方法
:(ちょうど最初の質問のために働いて新バージョン、)

ACEActivity

public class ACEActivity extends Activity { 
List<Question> quesList; 
int score = 0; 
int qid = 0; 
Question currentQ; 
TextView txtQuestion; 
RadioButton rda, rdb, rdc, rdd; 
Button checkBtn; 

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

    // THIS PART IS NEW ================================ 
    // Get the intent 
    Intent intent = getIntent(); 
    // Get the question id (if there are any extras) 
    Bundle extras = intent.getExtras(); 
    if (extras != null) { 
     int qid = extras.getInt("nextQuestionID"); 
    } else { 
     int qid = 0; 
    } 
    // ================================================== 

    DatabaseHelper db = new DatabaseHelper(this); 

    quesList = db.getAllACEQuestions(); 
    currentQ = quesList.get(qid); 
    txtQuestion = (TextView)findViewById(R.id.textView); 
    rda = (RadioButton)findViewById(R.id.radio0); 
    rdb = (RadioButton)findViewById(R.id.radio1); 
    rdc = (RadioButton)findViewById(R.id.radio2); 
    rdd = (RadioButton)findViewById(R.id.radio3); 
    checkBtn = (Button) findViewById(R.id.checkButton); 

    setQuestionView(qid); 

    checkBtn.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      RadioGroup grp = (RadioGroup) findViewById(R.id.radioGroup); 
      RadioButton answer = (RadioButton) findViewById(grp.getCheckedRadioButtonId()); 
      Log.d("yourans", currentQ.getANSWER() + " " + answer.getText()); 
      // THIS PART IS NEW AND WORKING FINE ================================ 
      // If the correct answer was clicked 
      if (currentQ.getANSWER().equals(answer.getText())) { 
       Intent intent = new Intent(ACEActivity.this, CorrectACEActivity.class); 
       startActivity(intent); 
      // If the wrong answer was clicked 
      } else { 
       Intent intent = new Intent(ACEActivity.this, FalseACEActivity.class); 
       startActivity(intent); 
      } 
     } 
    }); 
} 

private void setQuestionView() { 
    txtQuestion.setText(currentQ.getQUESTION()); 
    rda.setText(currentQ.getOPTA()); 
    rdb.setText(currentQ.getOPTB()); 
    rdc.setText(currentQ.getOPTC()); 
    rdd.setText(currentQ.getOPTD()); 
    qid++; 
    } 
} 

ACECorrectActivity(フィードバック活動がロードされ、とき正しい答えが選択され、次のボタンがACEActivityでクリックされる)

public class CorrectACEActivity extends Activity { 
List<Question> quesList; 
int score = 0; 
int qid = 0; 
Question currentQ; 
TextView txtQuestion; 
RadioButton rda, rdb, rdc, rdd; 
Button nextBtn; 

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

    DatabaseHelper db = new DatabaseHelper(this); 

    quesList = db.getAllACEQuestions(); 
    currentQ = quesList.get(qid); 
    txtQuestion = (TextView) findViewById(R.id.textView); 
    rda = (RadioButton) findViewById(R.id.radio0); 
    rdb = (RadioButton) findViewById(R.id.radio1); 
    rdc = (RadioButton) findViewById(R.id.radio2); 
    rdd = (RadioButton) findViewById(R.id.radio3); 
    nextBtn = (Button) findViewById(R.id.nextButton); 

    // Set colors according to correct answer 
    rda.setBackgroundColor(Color.RED); 
    rdb.setBackgroundColor(Color.RED); 
    rdc.setBackgroundColor(Color.RED); 
    rdd.setBackgroundColor(Color.RED); 

    if(currentQ.getANSWER().equals(currentQ.getOPTA())) { 
     rda.setBackgroundColor(Color.GREEN); 
    } else if(currentQ.getANSWER().equals(currentQ.getOPTB())) { 
     rdb.setBackgroundColor(Color.GREEN); 
    } else if(currentQ.getANSWER().equals(currentQ.getOPTC())) { 
     rdc.setBackgroundColor(Color.GREEN); 
    } else if(currentQ.getANSWER().equals(currentQ.getOPTD())) { 
     rdd.setBackgroundColor(Color.GREEN); 
    } 

    setQuestionView(); 

    // WHEN NEXT BUTTON IS CLICKED RETURN TO ACEActivity AND LOAD NEXT QUESTION 
    nextBtn.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      Intent intent = new Intent(CorrectACEActivity.this, ACEActivity.class); 
      intent.putExtra("nextQuestionID", currentQ + 1); 
      startActivity(intent); 
     } 
    }); 
} 

private void setQuestionView() { 
    txtQuestion.setText(currentQ.getQUESTION()); 
    rda.setText(currentQ.getOPTA()); 
    rdb.setText(currentQ.getOPTB()); 
    rdc.setText(currentQ.getOPTC()); 
    rdd.setText(currentQ.getOPTD()); 
    qid++; 
    } 
} 



最初の質問は完全に機能します。しかし、最初の質問に答えた後に私がACEActivityに戻ったら、最初の質問がもう一度表示されます。


ご覧のとおり、私は本当にこれが初めてで、どんな助けでも大変うれしいです!ありがとうございました!!

答えて

1
intent.putExtra("nextQuestionID", currentQ + 1); 

あなたはCorrectACEActivityに余計な設定をしていますが、そうであってはいけませんか?

intent.putExtra("nextQuestionID", qid+ 1); 
+0

ありがとうございました!あなたは正しいです。私のコードには他にも多くの問題があります。したがって、私は完全に私のプロジェクトのレイアウトを変更しようとします。しかし、これを指摘してくれてありがとう! – Schwesi

+0

私は助けてうれしいです。 答えとしてマークしてください – Farid

関連する問題