ActivityTwo.java not taken into account

Hi, my source code is below;

This is ActiviyOne.java

package course.labs.activitylab; import android.app.Activity; import android.app.Fragment; import android.content.Intent; import android.os.Bundle; import android.util.Log; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.TextView; public class ActivityOne extends Activity { // Use these as keys when you're saving state between reconfigurations private static final String RESTART_KEY = "restart"; private static final String RESUME_KEY = "resume"; private static final String START_KEY = "start"; private static final String CREATE_KEY = "create"; // String for LogCat documentation private final static String TAG = "Lab-ActivityOne"; // Lifecycle counters // TODO: public Integer mCreate = 0; public Integer mRestart = 0; public Integer mStart = 0; public Integer mResume = 0; // Create variables named // mCreate, mRestart, mStart and mResume // to count calls to onCreate(), onRestart(), onStart() and // onResume(). These variables should not be defined as static. // You will need to increment these variables' values when their // corresponding lifecycle methods get called. // TODO: Create variables for each of the TextViews TextView mTvCreate; TextView mTvRestart; TextView mTvStart; TextView mTvResume; // named mTvCreate, mTvRestart, mTvStart, mTvResume. // for displaying the current count of each counter variable @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_one); // TODO: Assign the appropriate TextViews to the TextView variables mTvCreate = (TextView) findViewById(R.id.create); mTvRestart = (TextView) findViewById(R.id.restart); mTvResume = (TextView) findViewById(R.id.resume); mTvStart = (TextView) findViewById(R.id.start); // Hint: Access the TextView by calling Activity findViewById() // textView1 = (TextView) findViewById(R.id.textView1); Button launchActivityTwoButton = (Button) findViewById(R.id.bLaunchActivityTwo); launchActivityTwoButton.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO: // Launch Activity Two // Hint: use Context startActivity() method // Create an intent stating which Activity you would like to // start //Intent intent = null; Intent StartIntent = new Intent(getApplicationContext(), ActivityTwo.class); startActivity(StartIntent); // Launch the Activity using the intent } }); // Has previous state been saved? if(savedInstanceState != null) { // TODO: // Restore value of counters from saved state // Only need 4 lines of code, one for every count variable mCreate = savedInstanceState.getInt(CREATE_KEY); mStart = savedInstanceState.getInt(START_KEY); mRestart = savedInstanceState.getInt(RESTART_KEY); mResume = savedInstanceState.getInt(RESUME_KEY); //Log.i(TAG, "mCreate " + mCreate + "mResume " + mResume + "mStart " + mStart + "mRestart " + mRestart); //super.onSaveInstanceState(savedInstanceState); } // Emit LogCat message Log.i(TAG, "Entered the onCreate() method"); // TODO: mCreate++; displayCounts(); // Update the appropriate count variable // Update the user interface via the displayCounts() method } // Lifecycle callback overrides @Override public void onStart() { super.onStart(); // Emit LogCat message Log.i(TAG, "Entered the onStart() method"); // TODO: mStart++; displayCounts(); // Update the appropriate count variable // Update the user interface } @Override public void onResume() { super.onResume(); // Emit LogCat message Log.i(TAG, "Entered the onResume() method"); // TODO: mResume++; displayCounts(); // Update the appropriate count variable // Update the user interface } @Override public void onPause() { super.onPause(); // Emit LogCat message Log.i(TAG, "Entered the onPause() method"); } @Override public void onStop() { super.onStop(); // Emit LogCat message Log.i(TAG, "Entered the onStop() method"); } @Override public void onRestart() { super.onRestart(); // Emit LogCat message Log.i(TAG, "Entered the onRestart() method"); // TODO: mRestart++; displayCounts(); // Update the appropriate count variable // Update the user interface } @Override public void onDestroy() { super.onDestroy(); // Emit LogCat message Log.i(TAG, "Entered the onDestroy() method"); } @Override public void onSaveInstanceState(Bundle savedInstanceState) { // TODO: super.onSaveInstanceState(savedInstanceState); savedInstanceState.putInt(CREATE_KEY, mCreate); savedInstanceState.putInt(RESTART_KEY, mRestart); savedInstanceState.putInt(RESUME_KEY, mResume); savedInstanceState.putInt(START_KEY, mStart); // Save state information with a collection of key-value pairs // 4 lines of code, one for every count variable } // Updates the displayed counters // This method expects that the counters and TextView variables use the // names // specified above public void displayCounts() { // TODO - uncomment these lines mTvCreate.setText("onCreate() calls: " + mCreate); mTvStart.setText("onStart() calls: " + mStart); mTvResume.setText("onResume() calls: " + mResume); mTvRestart.setText("onRestart() calls: " + mRestart); } } 

And this is ActivityTwo.java

  package course.labs.activitylab; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.util.Log; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.TextView; public class ActivityTwo extends Activity { // Use these as keys when you're saving state between reconfigurations private static final String RESTART_KEY = "restart"; private static final String RESUME_KEY = "resume"; private static final String START_KEY = "start"; private static final String CREATE_KEY = "create"; // String for LogCat documentation private final static String TAG = "Lab-ActivityTwo"; // Lifecycle counters // TODO: public Integer mCreate = 0; public Integer mRestart = 0; public Integer mStart = 0; public Integer mResume = 0; // Create variables named // mCreate, mRestart, mStart and mResume // to count calls to onCreate(), onRestart(), onStart() and // onResume(). These variables should not be defined as static. // You will need to increment these variables' values when their // corresponding lifecycle methods get called. // TODO: Create variables for each of the TextViews TextView mTvCreate; TextView mTvRestart; TextView mTvStart; TextView mTvResume; // named mTvCreate, mTvRestart, mTvStart, mTvResume. // for displaying the current count of each counter variable @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_two); // TODO: Assign the appropriate TextViews to the TextView variables mTvCreate = (TextView) findViewById(R.id.create); mTvRestart = (TextView) findViewById(R.id.restart); mTvStart = (TextView) findViewById(R.id.start); mTvResume = (TextView) findViewById(R.id.resume); // Hint: Access the TextView by calling Activity findViewById() // textView1 = (TextView) findViewById(R.id.textView1); Button closeButton = (Button) findViewById(R.id.bClose); closeButton.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO: /* Intent FinishIntent = new Intent(ActivityTwo.this, ActivityOne.class); finish(); */ // This function closes Activity Two // Hint: use Context finish() method // ActivityTwo.this.finish(); // finish(); // Intent tmpIntent = new Intent(getApplicationContext(), ActivityOne.class); finish(); //ActivityTwo.this.finish(); } }); /* savedInstanceState.putInt(CREATE_KEY, mCreate); savedInstanceState.putInt(RESTART_KEY, mRestart); savedInstanceState.putInt(RESUME_KEY, mResume); savedInstanceState.putInt(START_KEY, mStart); */ // Has previous state been saved? if(savedInstanceState != null) { // TODO: // Log.i(TAG, "Entered restoring values of counters"); super.onRestoreInstanceState(savedInstanceState); mCreate = savedInstanceState.getInt(CREATE_KEY); mStart = savedInstanceState.getInt(START_KEY); mRestart = savedInstanceState.getInt(RESTART_KEY); mResume = savedInstanceState.getInt(RESUME_KEY); //Log.i(TAG, "mCreate " + mCreate + "mResume " + mResume + "mStart " + mStart + "mRestart " + mRestart); // Restore value of counters from saved state // Only need 4 lines of code, one for every count variable // super.onSaveInstanceState(savedInstanceState); } // Emit LogCat message mCreate++; Log.i(TAG, "Entered the onCreate() method"); // TODO: displayCounts(); // Update the appropriate count variable // Update the user interface via the displayCounts() method } // Lifecycle callback methods overrides @Override public void onStart() { super.onStart(); // Emit LogCat message mStart++; Log.i(TAG, "Entered the onStart() method"); // TODO: displayCounts(); // Update the appropriate count variable // Update the user interface } @Override public void onResume() { super.onResume(); // Emit LogCat message mResume++; Log.i(TAG, "Entered the onResume() method"); // TODO: displayCounts(); // Update the appropriate count variable // Update the user interface } @Override public void onPause() { super.onPause(); // Emit LogCat message Log.i(TAG, "Entered the onPause() method"); } @Override public void onStop() { super.onStop(); // Emit LogCat message Log.i(TAG, "Entered the onStop() method"); } @Override public void onRestart() { super.onRestart(); // Emit LogCat message mRestart++; Log.i(TAG, "Entered the onRestart() method"); // TODO: displayCounts(); // Update the appropriate count variable // Update the user interface } @Override public void onDestroy() { super.onDestroy(); // Emit LogCat message Log.i(TAG, "Entered the onDestroy() method"); } @Override public void onSaveInstanceState(Bundle savedInstanceState) { // TODO: // Save counter state information with a collection of key-value pairs // 4 lines of code, one for every count variable Log.i(TAG, "Saving instance state"); super.onSaveInstanceState(savedInstanceState); savedInstanceState.putInt(CREATE_KEY, mCreate); savedInstanceState.putInt(RESTART_KEY, mRestart); savedInstanceState.putInt(RESUME_KEY, mResume); savedInstanceState.putInt(START_KEY, mStart); } // Updates the displayed counters // This method expects that the counters and TextView variables use the // names // specified above public void displayCounts() { // TODO - uncomment these lines mTvCreate.setText("onCreate() calls: " + mCreate); mTvStart.setText("onStart() calls: " + mStart); mTvResume.setText("onResume() calls: " + mResume); mTvRestart.setText("onRestart() calls: " + mRestart); } } 

I have a problem. When I run the program, I want how many times I called

onCreate() , onStart() , onResume() , onResume() it works for one activity, but does not work in step 2. The counter does not work.

thanks

+4
source share
3 answers

1) The state of Activity1 is saved on the stack → when Activity2 is called.

2) When you click back, the state of Activity2 is saved and then destroyed (deleted from the stack).

3) Activity1 reads the saved state from the stack.

Try [Activity 1]:

  launchActivityTwoButton.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { Intent StartIntent = new Intent(getApplicationContext(), ActivityTwo.class); StartIntent.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT); startActivity(StartIntent); } }); 

[Step 2]:

  closeButton.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { Intent intent= new Intent(getApplicationContext(), ActivityOne.class); intent.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT); startActivity(intent); } }); 
+4
source

You created counters as local variables.

 public Integer mCreate = 0; public Integer mRestart = 0; public Integer mStart = 0; public Integer mResume = 0; 

So, after Activity2 is destroyed, i.e. after calling onStop (), these variables are also deleted.

Decision. Create one new class and create static counter variables in it.

+3
source
  super.onRestoreInstanceState(savedInstanceState); 

You should not call this method in onCreate() .

You should also use ActivityOne.this instead of getApplicationContext() for the Intent that runs ActivityTwo .

+2
source

All Articles