2014-02-17 44 views
0

我正在製作一個類似標誌測驗的遊戲。我有問題活動和關卡活動,所以當用戶正確回答他得分1.然後我想將關卡放在關卡活動中,這樣用戶可以解鎖下一關,但我不希望用戶留下問題的活動,直到現在我只發現這種方法如何將一項活動的分數放入另一項活動中而無需進行該活動?

意圖resultIntent =新的意圖(this,NextActivity.class);

resultIntent.putExtra(「score」,score);

startActivity(resultIntent);

但該方法的用戶進入到活動水平

我會讓我的代碼,如果需要的

公共類大延伸活動{

@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; 
} 

}

這裏是關卡活動

公開課Leve l擴展活動按鈕leve2 =(按鈕)findViewById(R.id.button1); leve2.setOnClickListener(新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; 
} 

}

感謝您的幫助!

+0

看起來您已經在使用SharedPreferences來保存用戶的高分,爲什麼不使用它們來存儲在問題上獲得的分數,然後在用戶返回到水平活動時獲取該分數? – drees

+2

耶穌...請格式化您的代碼。 –

回答

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」的字符串鍵,讓設備找到你保存在首選項的日期。

共享偏好設置會保存到手機中,除非通過它們所屬的應用程序進行訪問。因此,再次啓動應用後,您可以獲取上次使用應用時保存的用戶分數。

+0

他的要求是你不應該去其他活動看到這種變化。 – ucsunil

+0

謝謝你幫助了我很多,但現在你知道我怎麼能把所有的分數放在一個,我試過了:SCORE =(userScore + userScore1 + userScore2)但它不起作用 – user3310885

+0

每次你添加一個分數到使用關鍵USER_SCORE的首選項,它將覆蓋以前那裏的數據。嘗試通過從首選項中拉取總分,將新分數添加到總分中,然後將其存儲在首選項中 – drees

0

您可以做出評分爲靜態,然後從其他活動類修改IT將自動更改原始內容

+0

聲明變量爲靜態並允許它從另一個文件直接修改是不好的形式。它可能會工作,在小的情況下很容易,但可以借給非常多的代碼,這可能是一個噩夢修復。 – drees

0

將分數存儲在SharedPreferences中,而不是將其傳遞給Level中的意圖。然後,只要用戶可以在這裏導航,就可以在關卡活動(或其他任何關於此事的內容)中檢索該分數。你已經在你的代碼中使用SharedPreferences有:

SharedPreferences sharedPreferences = getPreferences(MODE_PRIVATE); 

然而,返回使用呼叫活動的類名稱用作共享首選項名稱共享偏好,即那些偏好值僅對您的活動「大」。使用具有應用範圍的偏好值,使用getSharedPreferences(),提供了一個共享偏好名:

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

創建從該編輯和存儲「得分」的值。然後檢索您的Level活動,最有可能的是在onCreate()中。

相關問題