保存活动的状态

时间:2012-07-10 15:26:48

标签: android android-layout android-intent

我正在尝试制作一个简单的数独游戏但是我的“继续”按钮有问题。首次启动应用程序时,该按钮被禁用:

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

2 个答案:

答案 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);