ThreeButtons alkalmazás

Tovább folytattam a Codelabs Android fundamentals kurzusát a Android fundamentals 02.1: Activities and intents rész következett. Ebben megismerkedtünk azzal, hogyan kommunikálhatnak egymással az Activity-k az Intentek segítségével, és létrehoztunk egy appot, mely erről szólt.

A TwoActivities feladatban üzenetet küldhettünk a Main Activity-ből egy másiknak, melyet az kiírt. Onnan pedig visszaküldhettünk egy másikat, melyet a Main Activity jelenített meg. Szépen, lépésről-lépésre végigvettük az egészet. A szorgalmi feladat ez volt:

Challenge: Create an app with three Button elements labeled Text One, Text Two, and Text Three. When any of these Button elements are clicked, launch a second Activity. That second Activity should contain a ScrollView that displays one of three text passages (you can include your choice of passages). Use an Intent to launch the second Activity with extras to indicate which of the three passages to display.

Én a három szövegnek a Coolio Gangsta’s Paradise, a Run DMC It’s like that, illetve a John Lennon Imagine című dalokat választottam. Ezeket beillesztettem a strings.xml-be, és a megnyomott gombtól függően jelenítettem meg őket a második Activity-ben.

A végén kicsit változtattam a feladaton, mert kíváncsi voltam, hogyan lehet több dolgot beletenni az Intentbe. Ezért nem csak a kiválasztott gomb számát küldtem át, hanem a szám címét is. Amúgy nyilván egyszerűbb lett volna, ha a SecondActivity.java fáljban a case ágaknál íratom ki a címeket, pl. így:

case "one":
                scrollTextView.setText(R.string.textFirst);
                headerView.setText("Gangsta's Paradise"));
                break;

Én nem így tettem, hanem a címeket külön átküldtem az Intenttel, csupán a próbálgatás kedvéért.

Képernyőképek

A kezdőképernyő (MainActivity) a három gombbal:

Az egyik szöveg a Text One gomb megnyitása után egy ScrollView-ban nyílik meg:

Lejjebb is lehet görgetni a számot:

A leckével sikeresen megértettem az Activity-k közötti kommunikációt Intentek segítségével, és átismételtem a ScrollView használatát. Azt is megtanultam, hogyan illesztek be tartalmat egy TextView-ba a strings.xml-ből.

Forráskód

activity_main.xml:

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <Button
        android:id="@+id/buttonOne"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_marginBottom="32dp"
        android:onClick="launchOne"
        android:text="@string/buttonOneText"
        app:layout_constraintBottom_toTopOf="@+id/buttonTwo"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.0"
        app:layout_constraintStart_toStartOf="parent" />

    <Button
        android:id="@+id/buttonTwo"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_marginBottom="32dp"
        android:onClick="launchTwo"
        android:text="@string/buttonTwoText"
        app:layout_constraintBottom_toTopOf="@+id/buttonThree"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.0"
        app:layout_constraintStart_toStartOf="parent" />

    <Button
        android:id="@+id/buttonThree"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_marginBottom="32dp"
        android:onClick="launchThree"
        android:text="@string/ButtonThreeText"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>

activity_second.xml:

<?xml version="1.0" encoding="utf-8"?>
<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"
    tools:context=".SecondActivity">

    <TextView
        android:id="@+id/header"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="@color/colorPrimaryDark"
        android:padding="20dp"
        android:textAppearance="@android:style/TextAppearance.DeviceDefault.Large"
        android:textColor="@android:color/white" />

    <ScrollView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_below="@+id/header">

        <TextView
            android:id="@+id/scrollText"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:background="@android:color/white"
            android:gravity="center_horizontal"
            android:padding="20dp"
            android:textAlignment="center"
            android:textAppearance="@android:style/TextAppearance.DeviceDefault"
            android:textColor="@android:color/black" />
    </ScrollView>
</RelativeLayout>

MainActivity.java

package com.viktorjava.threebuttons;

import androidx.appcompat.app.AppCompatActivity;

import android.content.Intent;
import android.os.Bundle;
import android.view.View;

public class MainActivity extends AppCompatActivity {

    public static final String CHOICE = "com.viktorjava.android.threebuttons.CHOICE";
    public static final String TITLE = "com.viktorjava.android.threebuttons.TITLE";
    public Intent intent;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        intent = new Intent(this, SecondActivity.class);
    }

    public void launchOne(View view) {
        intent.putExtra(CHOICE, "one");
        intent.putExtra(TITLE, "Gangsta's Paradise");
        startActivity(intent);
    }

    public void launchTwo(View view) {
        intent.putExtra(CHOICE, "two");
        intent.putExtra(TITLE, "It's like that");
        startActivity(intent);
    }

    public void launchThree(View view) {
        intent.putExtra(CHOICE, "three");
        intent.putExtra(TITLE, "Imagine");
        startActivity(intent);
    }
}

SecondActivity.java

package com.viktorjava.threebuttons;

import androidx.appcompat.app.AppCompatActivity;

import android.content.Intent;
import android.os.Bundle;
import android.widget.TextView;

public class SecondActivity extends AppCompatActivity {

    TextView scrollTextView;
    TextView headerView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_second);
        Intent intent = getIntent();
        scrollTextView = (TextView) findViewById(R.id.scrollText);
        headerView = (TextView) findViewById(R.id.header);

        headerView.setText(intent.getStringExtra(MainActivity.TITLE))
        switch (intent.getStringExtra(MainActivity.CHOICE)) {
            case "one":
                scrollTextView.setText(R.string.textFirst);
                break;
            case "two":
                scrollTextView.setText(R.string.textSecond);
                break;
            case "three":
                scrollTextView.setText(R.string.textThird);
                break;
            default:
                throw new IllegalStateException("Unexpected value: " + intent.getStringExtra(MainActivity.CHOICE));
        }
    }
}

Felhasznált segédletek