JavaでAndroid Studioアプリ開発を試みるの第4回 「ボタン関連①」

Android Studioのボタン操作を書いていこうと思います。
ようやく、ここまで来ました。

イメージとしては、
①ボタン部品を画面に追加する。
②ボタンが操作された時のコードを記載する。

この2つで何とかなりそうなのですが、実際には「ボタンが押されたか監視するリスナ」というコードを記載する必要もあります。
ここが少し躓く部分でしょう。

 

ボタン操作のためのソースコード

早速ですが、ボタン操作関連でMain Actiityに記載するソースコードは下記の通りです。

java -> com.aoi345.btnsample -> Main_Activity
public class MainActivity extends AppCompatActivity {

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

        //ボタンの処理
        //部品の情報を取得
        Button confirmBtn = findViewById(R.id.confirmButton);  ・・・①
        //リスナの生成
        confirmBtnLister btn_listener = new confirmBtnLister(); ・・・②
        //リスナの設定
        confirmBtn.setOnClickListener(btn_listener);       ・・・③
    }

 

まずは、mainActivityに上記の記載を追加します。
プログラムでactivity_mail.xmlで追加したボタンを操作できるようにするのが①です。
findViewByIdというメソッドで「id」を基準に部品を指定します。

このidと言うのはactivity_mail.xmlの方でandroid:id=”***”で指定したやつです。
それぞれの部品にidを設定していたのはこのためだったのですね。

ソースコードに「Button confirmBtn = findViewById(R.id.confirmButton);」と記載することで、activity_mail.xmlの@+id/confirmButtonで指定したボタンの取り扱いができるようになりました。

res -> layout -> 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/confirmButton"
        android:text="@string/confirm_btn_name"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        app:layout_constraintEnd_toEndOf="parent"
        />
    </androidx.constraintlayout.widget.ConstraintLayout>

 

リスナの生成とボタンへの紐づけ

そして、次が②のconfirmBtnLister btn_listener = new confirmBtnLister();です。
いきなり謎の文字列が並びます。

まず、confirmBtnListerと言うのは、自分でこれから作るクラスです。
View.OnClickListener(ボタン用のリスナとして定番)というボタンが押された時に動作を記載するクラスを実装したクラスです。
このクラスの中身は、ボタンが押された時の動作を記載するクラスです。

書き方的には
クラス型 リスナのインスタンス名 = new クラス名();
というjavaのクラスインスタンスを新たに作成するときのいつも通りの記載方法です。

 

そして、最後に③のconfirmBtn.setOnClickListener(btn_listener);です。
これは結局のところ、ボタンとリスナを紐づけているだけです。

View.OnClickListener(ボタン用のリスナとして定番)を実装するとsetOnClickListenerというメソッドを使えます。
このメソッドは、先ほどの紐づけのメソッドで下記のように記載して使います。

ボタンインスタンス名.setOnCllickListener(リスナのインスタンス名);

まぁ、単体で見るとシンプルなものです。
ソースコードサンプルを見てみると色々なものが羅列されているのでパニックに陥りやすいのですが。。

最後の一行ですが、入れないとどうなるかと言うと、ボタンをリスナが監視していない状態です。
ボタンはボタンで処理できるようになっている。
リスナはリスナで、ユーザーの操作監視している。
ただし、リスナはボタンを監視しているわけではないので、ボタンが押されことをリスナが監視していない
その結論として、何も起こらない訳です。。(まぁ、そもそも、まだボタンの処理も書いてないのですが、、)

まとめ

今回はボタン操作のためのMain Activityに記載する内容について説明しました。
しかし、全然説明が進まない。。

自分自身もソースコードを初めて書きながらのメモなので、ちょっと説明ブログを更新するのが無理があるのかもしれない。
だけど、メモっておかないと忘れちゃうんですよね。

しかも、自分の説明ってあとで自分が見たときに断然分かりやすい
だから、まだ頑張ろうと思います。

 

Android Studioを使用したアプリ開発を試みるの第3回 「strings.xml」
https://aoi345.com/memorandum/android-studio-strings/

Android Studioを使用したアプリ開発を試みるの第3回 「strings.xml」