官术网_书友最值得收藏!

Switching between activities

Often we will want to activate one activity from within another activity. Although this is not a difficult task, it will require a little more setting up to be done than the previous recipes as it requires two activities. We will create two activity classes and declare them both in the manifest. We'll also create a button, as we did in the previous recipe, to switch to the activity.

Getting ready

We'll create a new project in Android Studio, just as we did in the previous recipes, and call this one ActivitySwitcher. Android Studio will create the first activity, ActivityMain, and automatically declare it in the manifest.

How to do it...

  1. Since the Android Studio New Project wizard has already created the first activity, we just need to create the second activity. Open the ActivitySwitcher project and navigate to File | New | Activity | Blank Activity, as shown in this screenshot:
  2. In the Customize the Activity dialog, you can leave the default Activity Name as it is, which is Main2Activity, or change it to SecondActivity, as shown here:
  3. Open the MainActivity.java file and add the following function:
    public void onClickSwitchActivity(View view) {
        Intent intent = new Intent(this, SecondActivity.class);
        startActivity(intent);
    }
  4. Now, open the activity_main.xml file located in the \res\layout folder and add the following XML to create the button:
    <Button
        android:id="@+id/button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerVertical="true"
        android:layout_centerHorizontal="true"
        android:text="Launch SecondActivity"
        android:onClick="onClickSwitchActivity"/>
  5. You can actually run the code at this point and see the second activity come up. We're going to go further and add a button to SecondActivity to close it, which will bring us back to the first activity. Open the SecondActivity.java file and add this function:
    public void onClickClose(View view) {
        finish();
    }
  6. Finally, add the Close button to the SecondActivity layout. Open the activity_second.xml file and add the following <Button> element just after the <TextView> element that was generated automatically:
    <Button
        android:id="@+id/buttonClose"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Close"
        android:layout_centerVertical="true"
        android:layout_centerHorizontal="true"
        android:onClick="onClickClose"/>
  7. Run the application on your device or emulator and see the buttons in action.

How it works...

The real work of this exercise is in the onClickSwitchActivity() method from Step 3. This is where we declare the second activity for the intent using SecondActivity.class. We went one step further by adding the close button to the second activity to show a common real-world situation—launching a new activity, then closing it, and returning to the original calling activity. This behavior is accomplished in the onClickClose() function. All it does is call finish(), but that tells the system that we're done with the activity. Finish doesn't actually return us to the calling activity or any specific activity for that matter; it just closes the current activity and relies on the back stack. If we want a specific activity, we can again use the intent object (we just change the class name while creating the intent).

This activity switching does not make a very exciting application. Our activity does nothing but demonstrate how to switch from one activity to another, which of course will form a fundamental aspect of almost any application that we develop.

If we had manually created the activities, we would need to add them to the manifest. By using these steps, Android Studio has already taken care of the XML. To see what Android Studio did, open the AndroidManifest.xml file and look at the <application> element:

<activity
    android:name=".MainActivity"
    android:label="@string/app_name">
    <intent-filter>
        <action android:name="android.intent.action.MAIN"/>
        <category android:name="android.intent.category.LAUNCHER/>
    </intent-filter>
</activity>
<activity
    android:name=".SecondActivity"
    android:label="@string/title_activity_second">
</activity>

One thing to note in the preceding autogenerated code is that the second activity does not have the <intent-filter> element. The main activity is generally the entry point when starting the application. That's why MAIN and LAUNCHER are defined—so that the system will know which activity to launch when the application starts.

See also

  • To learn more about embedding widgets such as the Button, visit Chapter 3, Views, Widgets, and Styles.
主站蜘蛛池模板: 井陉县| 长顺县| 崇礼县| 邵武市| 如皋市| 盐城市| 晴隆县| 安达市| 天峨县| 松原市| 海口市| 乌海市| 上林县| 应用必备| 陇西县| 永济市| 五原县| 东兴市| 武平县| 南澳县| 安康市| 元氏县| 阳城县| 绥化市| 抚顺市| 建宁县| 泰宁县| 柳林县| 邯郸县| 桐乡市| 新昌县| 应用必备| 正镶白旗| 高阳县| 布拖县| 涪陵区| 六盘水市| 临沂市| 民丰县| 油尖旺区| 黑龙江省|