如何在不进行该活动的情况下将一项活动的分数纳入另一项活动?

时间:2014-02-17 00:28:59

标签: android android-activity

我正在制作像徽标测验这样的游戏。我有问题活动和关卡活动所以当用户正确回答时他们得分1.然后我想将得分放在关卡活动中,这样用户可以解锁下一关,但我不希望用户留下问题活动,直到现在我才发现这个方法:

Intent resultIntent = new Intent(this, NextActivity.class);

resultIntent.putExtra("score", score);

startActivity(resultIntent);

但是,使用此方法,用户可以进入关卡活动。

我将留下我的代码供参考:

public class Big extends Activity {

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

        ActionBar actionBar = getActionBar();
        actionBar.setDisplayHomeAsUpEnabled(true); }

    public boolean onOptionsItemSelected(MenuItem item){
        Intent myIntent = new Intent(getApplicationContext(), Level1.class);
        startActivityForResult(myIntent, 0);
        return true;

    }


    private Button buttonSaveMem1;
    private EditText escrive; 
    private TextView respuest;
    private String [] answers;
    int score=0;
    int HighScore;

    private String saveScore = "HighScore";

    private int currentQuestion;



         public void init()
         {

            answers = new String[]{"Big"};      
            buttonSaveMem1 = (Button)findViewById(R.id.button1);     
            respuest = (TextView) findViewById(R.id.textView2); 

            escrive = (EditText) findViewById(R.id.editText1);
            buttonSaveMem1.setOnClickListener(buttonSaveMem1OnClickListener);

            LoadPreferences();
           }

         Button.OnClickListener buttonSaveMem1OnClickListener
            = new Button.OnClickListener(){

             @Override    
                public void onClick(View arg0) {    
                    checkAnswer();


                    // TODO Auto-generated method stub
                       SavePreferences();
                       LoadPreferences();
             }};









         public boolean isCorrect(String answer)    
         {     
             return (answer.equalsIgnoreCase(answers[currentQuestion]));
             } 


         public void checkAnswer()  {     
                String answer = escrive.getText().toString();  
                if(isCorrect(answer)) {
                    update();

                    respuest.setText("You're right!" + "   The Answer is " + answer + "    your score is:" + score +"  " +
                            "HighScore:  " + HighScore);
                    score =1;



                }
                else {
                    respuest.setText("Sorry, The answer is not right!");

                }




            }
         private void update() {
         if (score > HighScore)
            { HighScore = score; }
            }


         private void SavePreferences(){
                SharedPreferences sharedPreferences = getPreferences(MODE_PRIVATE);
                SharedPreferences.Editor editor = sharedPreferences.edit();
                editor.putString("MEM1", respuest.getText().toString());
                sharedPreferences.edit().putInt(saveScore, HighScore).commit();
                editor.commit();
               }

               private void LoadPreferences(){
                SharedPreferences sharedPreferences = getPreferences(MODE_PRIVATE);
                String strSavedMem1 = sharedPreferences.getString("MEM1", "");
                HighScore = sharedPreferences.getInt(saveScore, 0);
                respuest.setText(strSavedMem1);

               }









    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

}

以下是关卡活动:

public class Level extends Activity {

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


    Button salir = (Button) findViewById(R.id.button3); 
    salir.setOnClickListener( new View.OnClickListener() { 


        @Override public void onClick(View v) {
            startActivity(new Intent(Level.this, MainActivity.class)); }
    }
            )
            ;


Button leve2 = (Button) findViewById(R.id.button1); 
    leve2.setOnClickListener( new View.OnClickListener() { 


        @Override public void onClick(View v) {
            startActivity(new Intent(Level.this, Level2.class)); }
    }
            )
            ;  }   
    Button leve1 = (Button) findViewById(R.id.button1); 
    leve1.setOnClickListener( new View.OnClickListener() { 


        @Override public void onClick(View v) {
            startActivity(new Intent(Level.this, Level1.class)); }
    }
            )
            ; 



    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.level, menu);
        return true;
    }

}

感谢您的帮助!

4 个答案:

答案 0 :(得分:0)

您可以将分数设为静态,然后从其他活动类进行修改。 IT会自动将其更改为原始版本。

答案 1 :(得分:0)

在您的问题活动中,将用户的分数存储在SharedPreferences

    SharedPreferences prefs = getSharedPreferences(PREF_NAME, Context.MODE_PRIVATE);
    prefs.edit.putLong(USER_SCORE, score).commit();

然后当您返回到关卡的活动时,您可以从首选项中获取。

    SharedPreferences prefs = getSharedPreferences(PREF_NAME, Context.MODE_PRIVATE);
    long userScore = prefs.getLong(USER_SCORE, 0);

USER_SCORE只是一个字符串键,如USER_SCORE =“user_score”,允许设备查找存储在首选项中的日期。

共享偏好设置会保存到手机中,除非通过他们所属的应用程序,否则无法访问。因此,在再次启动应用程序时,您可以获得上次使用该应用程序时保存的用户分数。

答案 2 :(得分:0)

将分数存储在SharedPreferences中,而不是将其传递给intent中的Level。然后,只要用户可以在那里导航,您就可以在活动(或任何其他事项)级别内检索该分数。您已在代码中使用SharedPreferences:

SharedPreferences sharedPreferences = getPreferences(MODE_PRIVATE);

但是,使用调用Activity的类名作为共享首选项名称返回共享首选项,即这些首选项值对您的Activity'Big'是私有的。要使用具有应用程序范围的首选项值,请使用getSharedPreferences(),提供共享首选项名称:

SharedPreferences sharedPreferences = getSharedPreferences("MYPREFS", Activity.MODE_PRIVATE);

从中创建一个编辑器并存储'score'的值。然后检索它的Level活动,最有可能是它的onCreate()。

答案 3 :(得分:0)

在查看herethere之后,我终于通过以下其他答案找到了我对此问题的回答,并且我基本上使用了以下代码组合来执行此操作。

  1. 在第一项活动中:

    • 导入:

      import android.content.Context;
      
      import android.content.SharedPreferences;
      
    • 声明:

      public static int totalCount;
      
    • 并添加onCreate()

      SharedPreferences prefs = getPreferences(Context.MODE_PRIVATE);
      SharedPreferences.Editor editor = prefs.edit();
      
      totalCount = prefs.getInt("counter", 0);`
      totalCount++;`
      editor.putInt("counter", totalCount);`
      editor.apply();`
      
  2. 然后,在第二项活动中:

    • 导入:

      import static com.example.myapp.totalCount
      
    • 并添加onCreate()

      ((TextView) findViewById(R.id.text_view_id)).setText(String.valueOf(totalCount));
      
  3. 在第二项活动的布局中:

    • TextView放在:

      android:id="@+id/text_view_id"
      
  4. 并注意what the documentation says about naming shared preferences

      

    在命名共享首选项文件时,您应该使用一个名称   可为您的应用唯一识别。一个简单的方法是前缀   带有您的应用程序ID的文件名。例如:   "com.example.myapp.PREFERENCE_FILE_KEY"