Navigation Among Activities Using Android Studio 1.0

Introduction

In the previous article we learned about the View and ViewGroup objects. We learned about Layout and resources as well. In a previous article we created a hierarchy of View and ViewGroup objects. Now I will develop an activity that shows how to migrate from one activity to another. However choosing an activity from a new project in Android Studio has already been explained in my previous article.

Creating an activity named MainActivity

What do we need to do? We need to write the code for making an activity just as in a Layout file named activity_main.xml and use the following procedure:

  • change Relative Layout with Linear Layout

  • Add a Text Field

  • Add String resource

  • Add a button and its listener as well

activity_main.xml

This file contains all the attributes of the view elements necessary for making an activity. Here we are creating a simple activity that contains only a Text Field (please enter a text) and a button named Send.

Here is the code:

  1. // activity_main.xml  
  2.   
  3. <?xml version="1.0" encoding="utf-8"?>  
  4.   
  5. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  6.     xmlns:tools="http://schemas.android.com/tools"  
  7.     android:layout_width="match_parent"  
  8.     android:layout_height="match_parent"  
  9.     android:orientation="horizontal">  
  10.   
  11.     <EditText android:id="@+id/edit_message"  
  12.         android:layout_weight="1"  
  13.         android:layout_width="0dp"  
  14.         android:layout_height="wrap_content"  
  15.         android:hint="@string/edit_message" />  
  16.     <Button  
  17.         android:layout_width="wrap_content"  
  18.         android:layout_height="wrap_content"  
  19.         android:text="@string/button_send"  
  20.         android:onClick="sendMessage"/>  
  21.   
  22. </LinearLayout>  

It is just an activity with a Text Field and a Button. Now we attach a navigation-among-activities-using-android-studio:onClick attribute so that the message can be sent and another activity will receive that message.  

String.xml

String.xml contains the string resources such as "app name" , "edit_message" ,"action settings" and so on. So we must remove the default string "hello world".
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <resources>  
  3.   
  4.     <string name="app_name">Megatron</string>  
  5.     <string name="edit_message">please enter a text</string>  
  6.     <string name="button_send">Send</string>  
  7.     <string name="action_settings">Settings</string>  
  8.     <string name="title_activity_main">Main_Activity</string>  
  9.     <string name="title_activity_child">ChildActivity</string>  
  10.       
  11. </resources>  
It is just an activity with a Text Field with a Button. Now just try to attach a listener of the button so that the message can be sent and another activity will receive that message. 

XML Design

The previous code produces the following output:

design of xml part

Building an Intent

After creation of the first activity with a TextField and a Button as explained above it is now time to initiate this activity using a thing called an Intent.

An Intent is an object that provides runtime binding between two separate components (such as two activities). The Intent represents an application's  "intent to do something". Intents could be used for a wide variety of tasks, but most often they are used to start another activity.

In MainActivity.java declare a method named sendMessage(View view) with these parameters and inside it create an Intent to start an activity called DisplayMessageActivity with this code given below:
  1. public void sendMessage(View view) {  
  2.     Intent intent = new Intent(this, ChildActivity.class);  
  3. }  
  • We need to create a class for ChildActivity because the reference to this class might raise an error in Android Studio.

  • Note that in the constructor used here, "this" is used because the Activity is a subclass of the Context class and imports the Intent class. ( import navigation-among-activities-using-android-studio.content.Intent; ).
    However Android Studio automatically suggests that we press ALT+ENTER and the relevant class will be imported and the packages as well.

  • Inside the sendMessage() method use findViewById() to get an EditText element.

    1. EditText editText = (EditText) findViewById(R.id.edit_message);  
  • At the top of the file import the EditText class again. Press ALT+ENTER and the relevant class will be imported and the packages as well.

  • Assign the text to a local message variable and use the putExtra() method as in the following:

    1.  String message = editText.getText().toString();  
    2.  intent.putExtra(EXTRA_MESSAGE, message);  
    3. }
  • We must add an EXTRA_MESSAGE definition as shown below:

    1. public class MyActivity extends ActionBarActivity {  
    2.     public final static String EXTRA_MESSAGE = "com.example..megatron.MESSAGE";  
    3.   
    4. }  
  • Finally just finish the sendMessage() method with startActivity(intent) and now invoke the send button.

MainActivity.java will look such as: 

  1. package com.example.gkumar.megatron;  
  2.   
  3. import android.content.Intent;  
  4. import android.support.v7.app.ActionBarActivity;  
  5. import android.os.Bundle;  
  6. import android.support.v7.internal.widget.AdapterViewCompat;  
  7. import android.view.Menu;  
  8. import android.view.MenuItem;  
  9. import android.view.View;  
  10. import android.widget.EditText;  
  11.   
  12.   
  13. public class Main_Activity extends ActionBarActivity {  
  14.     Public final static String EXTRA_MESSAGE="com.example.gkumar.megatron.MESSAGE"  
  15.     @Override  
  16.     protected void onCreate(Bundle savedInstanceState) {  
  17.         super.onCreate(savedInstanceState);  
  18.         setContentView(R.layout.activity_main_);  
  19.   
  20.     }  
  21.     public void sendMessage(View view)  
  22.     {  
  23.         // building an Intent  
  24.         Intent intent= new Intent(this,ChildActivity.class);  
  25.   
  26.         EditText editText = (EditText) findViewById(R.id.edit_message);  
  27.         String message = editText.getText().toString();  
  28.         intent.putExtra(EXTRA_MESSAGE , message);  
  29.         startActivity(intent);  
  30.   
  31.     }  
  32.   
  33.     @Override  
  34.     public boolean onCreateOptionsMenu(Menu menu) {  
  35.         // Inflate the menu; this adds items to the action bar if it is present.  
  36.         getMenuInflater().inflate(R.menu.menu_main_, menu);  
  37.         return true;  
  38.     }  
  39.   
  40.     @Override  
  41.     public boolean onOptionsItemSelected(MenuItem item) {  
  42.         // Handle action bar item clicks here. The action bar will  
  43.         // automatically handle clicks on the Home/Up button, so long  
  44.         // as you specify a parent activity in AndroidManifest.xml.  
  45.         int id = item.getItemId();  
  46.   
  47.         //noinspection SimplifiableIfStatement  
  48.         if (id == R.id.action_settings) {  
  49.             return true;  
  50.         }  
  51.   
  52.         return super.onOptionsItemSelected(item);  
  53.     }  
  54. }  

Now the sending and action procedure is completed. Now after clicking the send button a something must be there to catch the text being entered by the user. Then for this we need to create a new Activity.

Create the second activity
  • Go to the Java directory on the package name com.example.gkumar.megatron. Right-click it and select new > Activity > Blank Activity.

choosing an activity explicit

  • In the naming window of Activity choose Activity name as ChildActivity

  • layout name : activity_child.xml

  • Title: ChildActivity

  • Hierarchical parent: MainActivity

  • package name: com.example.gkumar.megatron

naming this activity blank

Click Finish and open the ChildActivity.java file and use the following procedure:

  • The newly created Activity file must have an implementation of onCreate() and onOptionsItemSelected(), that handles the action bar's up behavior and must remain untouched.

  • Remove the onCreateOptionsMenu() method, we don't need it.

Receive the Intent

As we all know and learned above that every activity needs an Intent irrespective of the user's handling of Activity.

  • Look at the default method generated by setContentView(R.layout.activity_display_message). Remove that line.

  • Get the intent and assign it to a local variable.

    1. Intent intent = getIntent();  
  • At the top import the Intent Class as we did in MainActivity.java.

  • Now receive the message delivered by the previous activity using the getStringExtra() method.

    1. String message = intent.getStringExtra(MyActivity.EXTRA_MESSAGE);  

Display the Message

  • in the onCreate() method create a TextView object

  • set the text size and message with setText();

  • set the text size up to 50 and the text as message.

  • add the TextView as a root view of the activity's layout by ing it to setContentView(textview);

ChildActivity.java

  1. package com.example.gkumar.megatron;  
  2.   
  3. import android.content.Intent;  
  4. import android.support.v7.app.ActionBarActivity;  
  5. import android.os.Bundle;  
  6. import android.view.Menu;  
  7. import android.view.MenuItem;  
  8. import android.widget.TextView;  
  9.   
  10.   
  11. public class ChildActivity extends ActionBarActivity {  
  12.   
  13.     @Override  
  14.     protected void onCreate(Bundle savedInstanceState) {  
  15.         super.onCreate(savedInstanceState);  
  16.                   // receiving the intent  
  17.         Intent intent = getIntent();  
  18.         String message = intent.getStringExtra(Main_Activity.EXTRA_MESSAGE);  
  19.           
  20.         // display the message  
  21.   
  22.         TextView textview = new TextView(this);  
  23.         textview.setTextSize(50);  
  24.         textview.setText(message);  
  25.   
  26.         // set the text view as the activity layout  
  27.         setContentView(textview);  
  28.   
  29.     }  
  30.   
  31.   
  32.     @Override  
  33.     public boolean onCreateOptionsMenu(Menu menu) {  
  34.         // Inflate the menu; this adds items to the action bar if it is present.  
  35.         getMenuInflater().inflate(R.menu.menu_child, menu);  
  36.         return true;  
  37.     }  
  38.   
  39. }  

 Output

After executing the preceding code I am getting the following errors: 

errors android studio

Although I am working on it I hope the output will be posted very soon.

Summary

In this article we learned how to migrate from one Activity to another Activity using Intents. In Android everything on the screen that is user intractable is called an activity. This article explains the entire procedure very clearly. However it includes nearly three major steps to do as shown, for example creating an activity, building an intent and creation of another activity for receiving  the pushed text.

Next Recommended Readings