我正在制作像徽标测验这样的游戏。我有问题活动和关卡活动所以当用户正确回答时他们得分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;
}
}
感谢您的帮助!
答案 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)
在查看here和there之后,我终于通过以下其他答案找到了我对此问题的回答,并且我基本上使用了以下代码组合来执行此操作。
在第一项活动中:
导入:
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();`
然后,在第二项活动中:
导入:
import static com.example.myapp.totalCount
并添加onCreate()
:
((TextView) findViewById(R.id.text_view_id)).setText(String.valueOf(totalCount));
在第二项活动的布局中:
将TextView
放在:
android:id="@+id/text_view_id"
并注意what the documentation says about naming shared preferences。
在命名共享首选项文件时,您应该使用一个名称 可为您的应用唯一识别。一个简单的方法是前缀 带有您的应用程序ID的文件名。例如:
"com.example.myapp.PREFERENCE_FILE_KEY"