【アプリ開発①】Intentを使って画面遷移ができるようになろう

どうも、Shinです。

 

今回は「Intent」というクラスを使って、画面遷移をやってみよう。という企画です。

Intentは複数のアクティビティ間のデータのやりとりをするときに使うクラスなようです。アプリ開発をしていると必ずでくわす奴なので、ここで一旦練習してみましょう。

完成品・コード

画面中央にテキストを打ち込んで、、、

もう1つの画面に表示させます。この画面遷移はIntentクラスをうまく使ってあげることが必要です。

<MainActivity.java>

package com.example.intent_pra;

import androidx.appcompat.app.AppCompatActivity;

import android.view.View;
import android.widget.Button;
import android.os.Bundle;
import android.widget.EditText;
import android.content.Intent;
import android.view.View.OnClickListener;

public class MainActivity extends AppCompatActivity {


    Button button;
    EditText editText;

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


        button = findViewById(R.id.button);
        editText = findViewById(R.id.editText);
        //ボタンを押したときのイベントを操作できるようにする
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
           //intentをインスタンス化。引数は今いるところから移動する場所を指定。
            Intent intent = new Intent(MainActivity.this, subactivity.class);
            //putExtraを使って、引数にキー名と、送る値を渡す。
            intent.putExtra("sendText",editText.getText().toString());
           //変数intentに代入した情報を含んだ状態で、アクティビティを開始する。
            startActivity(intent);
            }
        });
    }
}

<subactivity.java>

package com.example.intent_pra;

import androidx.appcompat.app.AppCompatActivity;

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

public class subactivity extends AppCompatActivity {

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

      //インテント情報を受け取る。
        Intent intent = this.getIntent();
        String text = intent.getStringExtra("sendText");
        TextView textView1 = findViewById(R.id.textView1);
        textView1.setText(text);
    }
}

参考サイトはhttps://techacademy.jp/magazine/2719

本企画で学んだこと

Intent intent = new Intent(.this ,subpage.class)

Intentクラスを使う時は、当たり前ですがnewしてインスタンス化する必要があります(newの後の「Intent(.this ,subpage.class)」にはコンストラクタがくる。使用できるコンストラクタは複数あるようです)。

第一引数には現在のアクティビティを、第二引数には画面遷移先のアクティビティを渡します。これは感覚的に理解できますね。

Intentの引数は、場合によって入れるデータが異なるので注意が必要。今のところ、画面遷移するためにしかIntentを使ったことがないので、その他の威力はまだ知りません。

Intentを理解するコツとしては、Intentを「情報をやりとりするための箱」のようなものとしての認識でOKかもしれません。https://www.javadrive.jp/android/intent/index1.html

 

なお、今回使用したIntentのコンストラクタはIntent(Context packageContext, Class cls)です。Intentで最もよく使われる明示的コンストラクタだそうです。これはしっかりと覚えておきたい。

intent.putExtra(“send Text”,editText.getText().toString());

遷移先へ何か情報を送るときにはputExtraが用いられます。詳細はこちらに書いてます。

第二引数のeditText.getText().toString()は、テキストエディットで入力した文字列を取得しています。キー名は「”send Text”」で、別アクティビティで受け取るときにこのキー名を使うのでわかりやすい単語にしておきましょう。

String text = intent.getStringExtra(“sendText”);

サブページに入力したメッセージを表示させたいので、その変数としてString型のtextを用意しました。

メインアクティビティから送られてきたキー名「”sendText”」をgetStringExtraの引数に打ち込むと、putExtraの第二引数の値を取得することができます。

ここで受け取ったtext内容を表示させるにはTextView1.setText(text)という風に、setText()メソッドを使えば表示できるというわけですね。

androidプログラミングがわかりやすく書かれているサイト

https://www.javadrive.jp/android/

初心者ならこのサイトで勉強できると知った。これなら書籍購入せずともある程度独学で勉強ができそう。

感想・気づいたこと

アプリとは言えないくらい簡単な企画でしたが、Intentについての理解を深めることができた。

また、初心者なのでまだまだ分からない箇所はあります。クラスやインスタンス、コンストラクタについては割と頭の中でイメージすることができるようになった。「コンストラクタ」について今回よく理解できたので少し感動した。が、私が苦手としている「ドット演算子」やら「this」については未だはっきりと理解に及んでいない。

 

こういった細かい実装を繰り返すことによってアプリを作る「流れ」のようなものが理解できるようになるはず。学んだことを理解して覚えておくことで、一々サイトを検索せずとも書けるようになりたい。

最終的な目標は、オブジェクト思考を完全に理解して、なるべくサイトを参考にせずコードをかけるようになることだ。

(執筆時間:1h10min)

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です