AndroidStudioでクリックイベントを使う

## クリック／タップ機能の作成
:::note info
## 作る機能
**ボタン**を押した際に
**ボタンを押してください** を **押されました** へ変更する
:::
**レイアウトの内容**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3953063/4c575003-647e-bf8f-3dd3-bbaff44474a2.png)
~~~xml:コード activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    >
    <TextView
        android:id="@+id/testText"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="ボタンを押してください"
        android:textAlignment="center" 
        android:textSize="18dp"
        android:layout_marginTop="8dp"
        android:layout_marginBottom="8dp"
        />
    <Button
        android:id="@+id/testButton"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="ボタン"
        />
</LinearLayout>
~~~

<br></br>

## クリック／タップ検知時の処理を追加
まずは**MaineActivity.java** へクラスとメソッドの追加

~~~java:追加する場所
public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }
    /*＋＋＋＋＋＋＋＋＋＋＋
    　　　ここに追加
    ＋＋＋＋＋＋＋＋＋＋＋*/
}
~~~

:::note info
## インポート
**import android.widget.TextView;**
※TextViewを扱うために必要
コードの３列目くらいに同じくimport～てのがあるので
その下らへんに入れとけばOK
:::
:::note info
## 追加するクラスとメソッド
class クラス名 implements View.OnClickListener{
    　　@<foo>Override
    　　public void onClick(View view){
    　　ここに処理を記述する
    　　}
}
:::

## 処理を入れていく
:::note info
## テキストのオブジェクトを取得
**TextView tv = findViewById(R.id.<INS>testText</INS>)**
型は各部品のタグ、今回はTextViewを取得する
activity_main.xmlのTextViewタグ内の
android:id="@+id/testText"を指定することで
変数 tv へ指定したオブジェクトを取得する
:::
:::note info
## 取得したTextViewの内容更新
**tv.setText("押されました")**
取得した変数.setText( ) の ( )へ文字列を入れることで更新される
:::
~~~java:更新後
    //クリックした際の処理
    class TextListener implements View.OnClickListener{
        @Override
        public void onClick(View view){
        TextView tv = findViewById(R.id.testText);
        tv.setText("押されました");
        }
    }
~~~

<br></br>

## クリック／タップ検知判定を作る
**MaineActivity.java** へ処理を追加する
~~~java:追加する場所
public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        /*＋＋＋＋＋＋＋＋＋＋＋
    　　　　　ここに追加
        ＋＋＋＋＋＋＋＋＋＋＋*/
    }

    class TextListener implements View.OnClickListener{
        @Override
        public void onClick(View view){
        TextView tv = findViewById(R.id.testText)
        tv.setText("押されました")
        }
    }
}
~~~
:::note info
## インポート
**import android.widget.Button;**
※Buttonを扱うために必要
:::
:::note info
## ボタンのオブジェクトを取得
**Button bt = findViewById(R.id.<INS>testButton</INS>);**
TextViewと同じくactivity_main.xmlの
Buttonタグのandroid:id="@+id/**testButton**"の
**testButton**の部分を (R.id."ここに記載") する
:::
:::note info
## インスタンス生成
**クリック後の処理を記述したクラスのインスタンスを生成する**

TextListenerという名前でクラスを作っているので
**TextListener testlistener = new TextListener();** とする。
~~~java:さっき作ったクリック後の処理を記述したクラス
class TextListener implements View.OnClickListener{
        @Override
        public void onClick(View view){
        TextView tv = findViewById(R.id.testText)
        tv.setText("押されました")
        }
    }
~~~
|インスタンス生成|
|:--:|
|クラス名　変数名 ＝ new　クラス名();|

:::
:::note info
## ボタンオブジェクトのクリック検知処理
**bt.setOnClickListener(testlistener)**
取得したボタンオブジェクトのbtがクリックされたら
インスタンスtestlistenerを発動する。
:::
~~~java:追加後の全体図　MainActivity.java
    package com.wabsarva.wings.android.testapplication;

import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

import androidx.activity.EdgeToEdge;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.graphics.Insets;
import androidx.core.view.ViewCompat;
import androidx.core.view.WindowInsetsCompat;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        EdgeToEdge.enable(this);
        setContentView(R.layout.activity_main);
        //今回追加した３行　↓
        Button bt = findViewById(R.id.testButton);
        TextListener testlistener = new TextListener();
        bt.setOnClickListener(testlistener);
    }

    class TextListener implements View.OnClickListener{
        @Override
        public void onClick(View view){
            TextView tv = findViewById(R.id.testText);
            tv.setText("押されました");
        }
    }
}
//インポートの中にいらんもの混じってるけど気にしない
~~~

これで
ボタンが押された→テキストの内容が変更する処理が完了

## 挙動を確認してみる
エミュレータで確認
![携帯.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3953063/2fdc28e4-c051-a3c4-75db-c19ccc99b078.gif)

ちゃんとできているみたい、やったね。