2016-10-19 158 views
0

我正在编程我的第一个Android应用程序。

我想创建一个测验应用程序。我有问题存储在一个SQLite数据库中,它们依次显示。
用户选择其中一个答案(一个单选按钮),然后点击'下一个按钮'并显示下一个问题,等等。

以下代码显示我的活动文件,其中一个接一个地显示每个问题,这是完美工作

显示下一个数据库条目


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

相关问题