我正在尝试制作一个简单的数独游戏但是我的“继续”按钮有问题。首次启动应用程序时,该按钮被禁用:
continueButton.setEnabled (false);
因此引导用户必须使用NewGame按钮。该按钮自动启用“继续”按钮:
continueButton.setEnabled (true);
问题是,关闭应用程序,使用手机的退出按钮或后退按钮,我将失去“继续”按钮的状态,重新启动应用程序时,将再次禁用。
这是我的代码:
public class Sudoku extends Activity implements OnClickListener {
private static final String TAG = "Sudoku";
private static final String PROFILE = "stato";
boolean t = false;
SharedPreferences preferences;
int a , b = 0, c = 0;
View continueButton;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
// Set up click listeners for all the buttons
continueButton = findViewById(R.id.continue_button);
continueButton.setOnClickListener(this);
View newButton = findViewById(R.id.new_button);
newButton.setOnClickListener(this);
View aboutButton = findViewById(R.id.about_button);
aboutButton.setOnClickListener(this);
View exitButton = findViewById(R.id.exit_button);
exitButton.setOnClickListener(this);
t = isFirstRun();
if (t == false){
continueButton.setEnabled(false);
}else{
continueButton.setEnabled(true);
}
}
@Override
protected void onResume() {
super.onResume();
Music.play(this, R.raw.main);
}
@Override
protected void onPause() {
super.onPause();
Music.stop(this);
}
public void savePreferences(){
SharedPreferences.Editor ed = preferences.edit();
ed.putBoolean("button", true);
ed.commit();
}
public boolean isFirstRun(){
preferences = PreferenceManager.getDefaultSharedPreferences(this);
return preferences.getBoolean("button", t);
}
//onClick method
public void onClick(View v) {
switch (v.getId()) {
case R.id.continue_button:
a = 1;
startGame(Game.DIFFICULTY_CONTINUE);
break;
// ...
case R.id.about_button:
Intent i = new Intent(this, About.class);
startActivity(i);
break;
// More buttons go here (if any) ...
case R.id.new_button://button NewGame when pressed enable continueButton
continueButton.setEnabled(true);
a = 0;
openNewGameDialog();
break;
case R.id.exit_button: //exit button
finish();
break;
}
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event)
{
if ((keyCode == KeyEvent.KEYCODE_BACK))
{
finish();
}
return super.onKeyDown(keyCode, event);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
super.onCreateOptionsMenu(menu);
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.menu, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.settings:
startActivity(new Intent(this, Prefs.class));
return true;
// More items go here (if any) ...
}
return false;
}
/** Ask the user what difficulty level they want */
private void openNewGameDialog() {
new AlertDialog.Builder(this)
.setTitle(R.string.new_game_title)
.setItems(R.array.difficulty,
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialoginterface,
int i) {
startGame(i);
}
})
.show();
}
/** Start a new game with the given difficulty level */
@SuppressLint("ParserError")
private void startGame(int i) {
Log.d(TAG, "clicked on " + i);
Intent intent = new Intent(this, Game.class);
intent.putExtra("blocca", a);
intent.putExtra(Game.KEY_DIFFICULTY, i);
startActivity(intent);
}
}
答案 0 :(得分:1)
看看android的Data Storage
选项。我建议只使用SharedPreferences
保存一个布尔值,然后在每次创建主活动时检查其值。
public class MainActivity extends Activity{
//Class used to retain data
private SharedPreferences preferences;
private boolean isFirstRun;
//initialize the preferences in onCreate()
@Override
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
preferences = PreferenceManager.getDefaultSharedPreferences(this);
isFirstRun = false;
}
//When your application gains the foreground, check to see if it is first time
@Override
public void onResume(){
//if nothing has been stored, returns true since it is the first run.
isFirstRun = preferences.getBoolean("first",true);
if(isFirstRun)
//disable continue button
else
//enable continue button
}
//Save preferences anytime your application loses the foreground
@Override
public void onPause(){
SharedPreferences.Editor ed = preferences.edit();
ed.putBoolean("first",isFirstRun);
ed.commit();
}
}
答案 1 :(得分:0)
您可以使用共享首选项并在onResume或OnPause方法中检查变量的状态
这些变量在不卸载或删除应用程序数据时保持活动
使用SharedPreferences创建变量
SharedPreferences getSharedPreferences prefs = (PROFILE, Context.MODE_PRIVATE);
SharedPreferences.Editor prefs.edit editor = ();
editor.putBoolean ("ContinueButtonValue", false);
editor.commit ();
并在应用程序暂停后恢复其值:
SharedPreferences prefs = getSharedPreferences (Settigns, Context.MODE_PRIVATE);
prefs.getBoolean sConfiguration = prefs.getBoolean ("ContinueButtonValue", false);