Start a Second Android Activity From The First
If you are new to Android development it is often easier to see simple examples rather than decode the developers online documentation. Building on the simple example seen in Your First Android Java Program - Hello World! another screen containing a simple message is loaded from a button. This demonstrates the principles of starting a new User Interface (UI) screen, helping to understanding on how Android handles UI creation.
To get a screen up and running in an app the following is required:
- The definition of the screen must be composed in a layout.
- An
Activity
class must be defined in a Java class file to handle the screen. - Android must be notified that the Activity exists, via the app's manifest file.
- The app must tell Android to start the new screen.
Studio handles most of the plumbing when adding a new activity to an app, performing tasks 1 to 3 automatically when an Activity is created using Studio's options. This leaves only a small amount of code to be written to load a second screen from the first app screen.
Start with a Basic Hello World App
Fire up Android Studio and open the Hello World project (see Your First Android Java Program - Hello World! on how to create the Hello World app).
Add Another Activity
In the Project explorer tree in the Studio select the app folder. (See the Android Project Structure article to become familiar with project files). Using the File menu or the context menu (commonly right-click) add a new Activity to the app via New and Activity. A Basic Activity can be used:
Set the properties for the new Activity, e.g.:
- Activity Name - Screen2
- Layout Name - secondscreen
- Title - Screen 2
Select the Parent to be the first Activity, com.example.helloworld.MainActivity (the parent is the screen the app returns to when the back button is pressed). All other settings remain as default (not a Launcher Activity, not a Fragment, Package set to com.example.helloworld, Target Source Set is main).
Click Finish and the Activity and associated layout is created. (If an error message is displayed on the new screen try the Invalidate Caches / Restart option on the File menu as discussed in the article Your First Android Java Program.)
Add a Button to the First Screen
Add a Button
to the first screen in the layout folder. (Tip: To find an item, e.g. layout, click the to level in the Project explorer and start typing the item's name to start a search.) The file activity_main.xml contains the screen elements for the first screen. With the file open drag and drop a Button widget onto the screen:
Set the Button's text to Next, use the right hand Component Tree tab to see the Properties.
Add Text to the Second Screen
Open the content_screen2.xml file in the layout folder and drag and drop a TextView
on to the screen:
As for the Button set the TextView text, e.g. to Hello! Again.
AndroidManifest.xml
When the Screen2 Activity was added to the app the correct definitions were added to the app's manifest file, AndroidManifest.xml in app/src/main. This file must be present in an app project. It provides the Android Operating System (OS) all the information it needs to manage the application and the components it contains. If AndroidManifest.xml is opened it will be seen that both the initial screen, MainActivity and the new screen, Screen2 are defined in activity sections. The information in these sections tells Android about the screens in an app.
Add Code to Start Screen 2
The button on the first screen will tell Android of our "intention" to start the Activity that loads the new Screen 2. To do this the button runs an onClick
method:
public void onClick(View v) {
Intent intent = new Intent(MainActivity.this, Screen2.class);
startActivity(intent);
}
In onClick the name of the required activity, Screen2.class, is passed in an Intent
object to the startActivity
method. The startActivity method is available on a Context
object; Context has a host of useful methods which provide access to the environment in which the app is executing. Context, and hence startActivity is always available within an Activity due to Android API subclassing.
The onClick method is connected to the button by an OnClickListener
callback from a View
. The following code is added to the MainActivity class, before the last closing brace (curly bracket, }) in the file MainActivity.java. Press Alt-Enter when prompted for the correct import
statements to be added automatically:
class handleButton implements OnClickListener {
public void onClick(View v) {
Intent intent = new Intent(MainActivity.this, Screen2.class);
startActivity(intent);
}
}
The Intent object is also given a reference to the app Context, and since MainActivity is subclassed we can use this (here MainActivity.this because of the inner class for the onClick handler). The startActivity method gives Android the opportunity to perform any required housekeeping and then fire up the Activity named in the Intent (Screen2).
The findViewById method, available to activities, is used to get a reference to the button. The setOnClickListener method can then be called to link the button to the onClick code. This is done before the closing brace at the end of the onCreate
method in MainActivity:
findViewById(R.id.button).setOnClickListener(new handleButton());
This is the full MainActivity code:
package com.example.helloworld;
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
findViewById(R.id.button).setOnClickListener(new handleButton());
}
class handleButton implements View.OnClickListener {
public void onClick(View v) {
Intent intent = new Intent(MainActivity.this, Screen2.class);
startActivity(intent);
}
}
}
When the app runs the first screen will show:
And pressing the Next button shows:
A button is not required to go back to the first screen. Android automatically provides a back button as part of the platform.
This article has shown the basics of starting another screen in an app. The code is available in a zip file, secondscreen.zip, with an instructions.txt on how to import the project into Studio. Later articles will show how data can be passed between screens.
See Also
- See some more Android Example Projects.
Archived Comments
Arthur Lu in January 2018 said: For some reason, whenever I run my code, it is unable to open the second activity, and instead re-opens the main activity.
Arthur Lu in January 2018 said: OK, so it turns out I accidentally deleted some important code on the second activity.
Gili Alafia in January 2018 said: But that doesn't answer the question of how to open the app from screen2 to mainactivity.
Dan from Tek Eye in January 2018 said: As it says in the article, use back (e.g. via the arrow on the action bar) to return to the first activity. If you want an explicit button just use the same type of code in the second screen that was used for the main activity:
.
.
.
findViewById(R.id.button2).setOnClickListener(new handleButton());
}
class handleButton implements View.OnClickListener {
public void onClick(View v) {
Intent intent = new Intent(Screen2.this, MainActivity.class);
startActivity(intent);
}
}
Author:Daniel S. Fowler Published: Updated: