【问题标题】:Calculate score for a quiz on android计算安卓测验的分数
【发布时间】:2012-10-15 09:54:06
【问题描述】:

我正在做一个quiz,因为我有 3 个活动Question1Question2Question3,每个都有 4 个可能的答案(按钮),只有一个按钮是正确的。我必须在测验结束时计算并显示用户的分数。

我做了一些研究,SHAREDPREFERENECES 似乎是解决方案。但我不知道如何使用它可以请任何人帮忙。 Question1.java 代码如下:假设 btnAnswer1a 是正确答案,我如何保存数据,然后在最后一个活动中将其显示在 textview 中。

 Button Answer1, Answer2, Answer3, Answer4;
 public static final String PREFS_NAME = "MyPrefsFile";
 static SharedPreferences settings;
 SharedPreferences.Editor editor;
 int ScoreCount;

 @Override
 public void onCreate(Bundle savedInstanceState) {
   super.onCreate(savedInstanceState);
   setContentView(R.layout.answer1);

  settings = getSharedPreferences(PREFS_NAME, 0);
  editor = settings.edit();

  ScoreCount = settings.getInt("ScoreCount", 10);

   Answer1 = (Button) findViewById(R.id.btnAnswer1a);
   Answer2 = (Button) findViewById(R.id.btnAnswer1b);
   Answer3 = (Button) findViewById(R.id.btnAnswer1c);
   Answer4 = (Button) findViewById(R.id.btnAnswer1d);

   Answer1.setOnClickListener(this);
   Answer2.setOnClickListener(this);
   Answer3.setOnClickListener(this);
   Answer4.setOnClickListener(this);

         }

@Override
public void onClick(View arg0) {
    // TODO Auto-generated method stub
switch (arg0.getId()) {


    case R.id.btnAnswer1a:
          Intent Screen1 = new Intent(Answer1.this, Color2.class); 
          Answer1.this.startActivity(Screen1); 
          editor.putInt("ScoreCount", 6);
          editor.commit();
        break;


case R.id.btnAnswer1b:
      Intent Screen = new Intent(Answer1.this, Color2.class); 
    Answer1.this.startActivity(Screen);  
    break;

case R.id.btnAnswer1c:
      Intent Screen3 = new Intent(Answer1.this, Color2.class); 
    Answer1.this.startActivity(Screen3);  
    break;

case R.id.btnAnswer1d:
    Intent Screen2 = new Intent(Answer1.this, Color2.class); 
    Answer1.this.startActivity(Screen2);  
   break;


}

【问题讨论】:

    标签: android android-activity sharedpreferences


    【解决方案1】:

    我认为,如果您传递信息的意图是更好的。你可以这样做:

    Intent i = new Intent("com.yourPackage.yourActivity");
    i.putExtra("keyForExtra", _ID);
    startActivity(i);
    

    和 onCreate 的结果活动你可以

    String data = getIntent().getStringExtra("keyForExtra");
    

    您可以将此字符串解析为整数或任何您喜欢的类型。

    但是,如果您要使用共享偏好来进行操作,那么对于写作:

    SharedPreferences settings = getSharedPreferences(YOUR_CUSTOM_PREFS_NAME, 0);
    SharedPreferences.Editor editor = settings.edit();
    editor.putInt("myScore", yourScore); // you can put a lot of thngs there. 
    editor.commit();
    

    要了解您还可以添加什么,请查看here

    SharedPreferences settings = getSharedPreferences(YOUR_CUSTOM_PREFS_NAME, 0);
    int currentScore = settings.getInt("myScore", defaultValue);
    

    有关共享首选项的详细存储文档,请查看here

    【讨论】:

    • 我有问题。当按下按钮时,另一个活动会出现 3 秒,而不是我将传递值的活动。如果我输入该代码 Intent i = new Intent("com.yourPackage.yourActivity"); i.putExtra("keyForExtra", _ID);开始活动(一);应该出现 3 秒的活动将不起作用。
    • 我不明白这个问题。您必须在结果活动中恢复分数。如果结果活动仅显示 3 秒,然后自己开始另一个活动,则将恢复的分数传递到那里。为此,您可能希望将恢复的分数变量设为实例变量。
    • 它不是显示 3 秒的结果活动。有一个图像只出现了 3 秒,接下来会打开一个活动,询问用户他看到了什么。然后在点击右键时,分数应该会增加或增加
    • 你在哪里显示图像?您能否详细说明事情如何运作的流程图?我的理解是:有一个活动,其中图像显示 3 秒,然后要求用户输入他看到的内容。同一活动需要输入。在输入时,整个过程会根据需要以分数递增/递减的方式重复。如果是这种情况,在第一个活动中将分数设置为 0。使其成为实例变量。然后将它传递给下一个活动,在那里检索它,存储在一个实例变量中,在获得答案后,​​更新它并通过它。重复直到需要
    【解决方案2】:

    当你想写一些东西到 SharedPreferences 时使用这个

    SharedPreferences sharedPreferences = getSharedPreferences("your_name_of_shared_preferences", 0);
    SharedPreferences.Editor editor = sharedPreferences.edit();
    editor.clear();
    editor.putInt("result", resultValue);
    editor.commit();
    

    要从他们那里读到一些东西,只需这样做

    SharedPreferences sharedPreferences = getSharedPreferences("your_name_of_shared_preferences", 0);
    int result = sharedPreferences.getInt("result", defaultValue);
    

    resultValue 是您的测验结果,如果您没有在该键下向 sharedPreferences 写入任何内容,则需要 defaultValue。

    【讨论】:

    • 当用户回答您的测验问题时,您将值写入 sharedPreferences(代码的第一部分)。 S 在您的每项活动中都是如此。当你想显示结果时,你从 sharedPreferences 获取值,所以我猜是在最后一个活动中。
    【解决方案3】:

    您是否有特定的原因需要针对每个问题进行不同的活动?这对我来说似乎效率很低(冗余代码,容易出错,内存明智)。您可以将所有问题和答案存储在数组中,并使用整数跟踪当前问题和分数。回答问题后,检查答案、更新分数、增加当前问题、获取新问题和答案并将其设置为问题文本字段和按钮标签。无需以这种方式通过分数,因为一切都在一个活动中。

    【讨论】:

    • 有一个图像只出现了 3 秒,然后打开一个活动,询问用户他看到了什么。然后在单击右侧按钮时,分数应该会增加或增加。是的,冗余代码,容易出错和内存明智。我不知道如何使用数组。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-15
    • 2016-11-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多