どうも、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)