whiteTIGER
whiteTIGER

Reputation: 401

Save state of an activity

I'm trying to make a simple sudoku but I have a problem with the Continue button. When you first start the app, the button is disabled with:

continueButton.setEnabled (false);

Thus leading the user to have to use NewGame button. That button automatically enabled the Continue button with:

continueButton.setEnabled (true);

The problem is that, closing the app, using the exit button or the back button of the phone, I lose the status of the Continue button, that when restart the app, is again disabled.

This is my code:

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

Upvotes: 0

Views: 457

Answers (2)

Joel
Joel

Reputation: 4772

Take a look at android's Data Storage options. I would recommend simply saving a boolean with SharedPreferences and then check its value every time your main activity is created.

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

Upvotes: 1

Darry Morales
Darry Morales

Reputation: 171

You can use the Shared Preference and check the status of your variables in onResume or OnPause methods

These variables are kept alive while not uninstall or delete the application data

To create a variable with SharedPreferences

SharedPreferences getSharedPreferences prefs = (PROFILE, Context.MODE_PRIVATE);

SharedPreferences.Editor prefs.edit editor = ();
editor.putBoolean ("ContinueButtonValue", false);
editor.commit ();

and to recover its value after a pause of the your application:

SharedPreferences prefs = getSharedPreferences (Settigns, Context.MODE_PRIVATE);          
prefs.getBoolean sConfiguration = prefs.getBoolean ("ContinueButtonValue", false);

Upvotes: 0

Related Questions