开始Android编程 - 建立一个简短的测验

时间:2010-10-05 18:36:09

标签: java android

好的,所以我正在编写我的第一个Android应用程序,基本上卡住了。该应用程序是一个简短的4个问题测验,每个问题有两个选项。这创建了16个可能的结果,我已经为其创建了描述。我希望应用程序在第4个问题得到解答后显示与用户对每个问题的回答相对应的描述。

现在我将值存储在一个字符串中,该字符串应该在每个问题之后构建在前一个字符串答案的基础上。所以第一个答案是t1,第二个答案是t2,依此类推。以下是第二个问题的代码:

public class Question2 extends Question1 implements OnClickListener
{
 private Button b1;
 private Button b2;
 public String t2;
 public TextView text2;

 @Override
 public void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
 setContentView(R.layout.question2);
 b1=(Button)findViewById(R.id.gamma);
 b2=(Button)findViewById(R.id.delta);
 b1.setOnClickListener(this);
 b2.setOnClickListener(this);
 text2 = (TextView)findViewById(R.id.TextView02);
 }


 public void onClick(View v) {
  Intent a = new Intent(this, Question3.class);
 if(v == b1)
 { 
  t2= t1+"gamma";
  text2.setText(t2);
 startActivity(a);
 }
  if(v == b2)
 {
 t2= t1+"delta";
 text2.setText(t2);
 startActivity(a);
 }

}
}

我的问题是字符串不会保存我在上一个问题中指定的值。我有一个textview,它简要显示问题的答案字符串返回的值(问题2的t2),它显示nullalpha或nullbeta,具体取决于用户的响应。

如何将t1之前分配的值保留在Question2中,以便添加?例如,如果来自Question1的t1 =“alpha”,并且用户选择Question2中的按钮b1,我如何使t2实际上等于“alphagamma”而不是“nullgamma”?这甚至可以用字符串吗?

非常感谢任何答案和建议。

1 个答案:

答案 0 :(得分:4)

您需要重新思考整个方法,并在面向对象原则中获得更好的理由。问题2扩展问题1没有任何意义,它们(可能)与彼此无关。

作为一个起始数据模型,拥有一个Question类可能是有意义的,如下所示:

public class Question {
   private String questionText;
   private List<String> options;
   private String currentAnswer;

   public Question(String questionText, List<String> options) {
      this.questionText = questionText;
      this.options = options;
   }

   public String getQuestionText() {
      return questionText;
   }

   public String getCurrentAnswer() {
      return currentAnswer;
   }

   public void setCurrentAnswer(String answer) {
      this.currentAnswer = answer;
   }
}

您也可以考虑将答案分成不同的对象..

然后你可以创建一个问题列表,每个问题都有一个Question对象。

而不是每个问题的一个活动,你可以有一个AnswerQuestionActivity,它接受一个问题(通过Intent额外),显示问题,然后返回Question对象并填写答案(再次通过Intent extra)

当您收到结果后,您可以使用返回的答案更新问题列表,然后根据List<Question>中的当前值重新计算显示字符串。