Переход на другой экран при клике по кнопке


Рассмотрим пример перехода с одного экрана на другой. Одновременно мы кратко познакомимся с полезным объектом Intent.

Создадим приложение с двумя экранами. Первый будет содержать элемент TextView и кнопку Button, при клике по которой мы должны будем запустить второе Активити с отображением второго экрана (здесь будем отображать только TextView).

Итак, приступим.

1. Добавим строковые ресурсы res/values/strings.xml:

<?xml version="1.0" encoding="utf-8"?>
<resources>
 
    <string name="app_name">New Screen</string>
    <string name="first_screen">First Screen</string>
    <string name="second_screen">Second Screen</string>    
    <string name="title_activity_second">SecondActivity</string>
    <string name="btn_text">Go!</string>
 
</resources>

2. Я буду использовать некоторые отступы в верстке, поэтому добавлю их тоже — res/values/dimens.xml:

<resources>
    <!-- Default screen margins, per the Android Design guidelines. -->
    <dimen name="activity_horizontal_margin">16dp</dimen>
    <dimen name="activity_vertical_margin">16dp</dimen>
</resources>

3. Добавим разметку для первого экрана — res/layout/activity_main.xml

<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:paddingBottom="@dimen/activity_vertical_margin"
    tools:context=".MainActivity">
 
    <TextView
        android:text="@string/first_screen"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/textView" />
 
    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/btn_text"
        android:id="@+id/button"
        android:layout_below="@+id/textView"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:layout_marginTop="36dp"
        android:onClick="newScreen"/>
 
</RelativeLayout>

TextView содержит ссылку на строковый ресурс first_screen, чтобы мы понимали, на каком экране находимся. Button содержит атрибут android:onClick с названием метода newScreen(), который будет обрабатывать клик.

4. Код MainActivity.java

package ru.androiddocs.newscreen;

import android.content.Intent;
import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.view.View;

public class MainActivity extends ActionBarActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    public void newScreen(View v) {
        Intent intObj = new Intent(this, SecondActivity.class);
        startActivity(intObj);
    }
}

В общем-то, тут все просто. В onCreate() мы определяем layout для отображения методом setContentView(). Метод newScreen() отрабатывается при нажатии на кнопку. Здесь мы создаем объект Intent (в конструктор передаем ссылку на текущий контекст this и указываем имя второго Активити с расширением class). После этого запускаем новое активити методом startActivity(), передавая в качестве параметра созданный Intent.

5. Создадим layout для второго Активити res/layout/activity_second.xml:

<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:paddingBottom="@dimen/activity_vertical_margin"
    tools:context="ru.androiddocs.newscreen.SecondActivity">
 
    <TextView
        android:text="@string/second_screen"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />
 
</RelativeLayout>

Тут только TextView со ссылкой на строковый ресурс second_screen.

6. Класс второго Активити — SecondActivity.java

package ru.androiddocs.newscreen;

import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;


public class SecondActivity extends ActionBarActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_second);
    }
}

Класс содержит только один метод onCreate(), в котором мы устанавливаем layout для отображения.

Проверьте, чтобы оба Активити были прописаны в файле манифеста AndroidManifest.xml. Если вы добавляли оба Активити с помощью Android Studio, то они пропишутся автоматически. На всякий случай приведу содержимое файла для моего проекта:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="ru.androiddocs.newscreen" >
 
    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <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>
    </application>
 
</manifest>

Теперь все можно запускать и тестировать.

Переход на другой экран при клике по кнопке

Переход на другой экран при клике по кнопке

Комментариев: 2 на “Переход на другой экран при клике по кнопке

  1. Руслан

    Я сделал все так, но у меня почему-то не запускается второе окно при клике на клавишу..

    Reply
    1. admin Post author

      Ошибки логгер пишет какие-то?

      Reply

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

*