LoginSignup
0
0

android studio 覚書 (お題 1:ボタンを押してテキストを更新する)

Last updated at Posted at 2023-11-18

お題 1:ボタンを押してテキストを更新する

1-1. イメージ

下記のような画面を実装する。

ボタン押下前
スクリーンショット 2023-11-18 203537.png

ボタン押下後
スクリーンショット 2023-11-18 203600.png


1-2. 実装

実装したコードは下記の通り。
MVC ModelのC(Controller)に該当する部分?
V(View)はxmlファイルの画面定義、M(Model)は...?

package com.example.helloworld;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;

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

public class MainActivity extends AppCompatActivity {

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

        // TextViewを取得
        final TextView text = (TextView)findViewById(R.id.text);

        // Buttonを取得
        Button button = (Button)findViewById(R.id.button);

        // Buttonをタップされた時の処理
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                text.setText("Click!!");
            }
        });
    }
}

1-3. 画面上のオブジェクトを取得する処理

画面上に生成されたTestViewやButtonにアクセスするため、それぞれのオブジェクトを取得する。

        // TextViewを取得
        final TextView text = (TextView)findViewById(R.id.text);

        // Buttonを取得
        Button button = (Button)findViewById(R.id.button);

1-4. ボタン押下時の処理

ボタン実行処理は、下記の通り。
button.setOnClickListener(instance);

        button.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                text.setText("Click!!");
            }
        });

コールバックに設定しているのは、Viewクラスインスタンスらしい。


1-5. 所感など

所感 1. Modelとは...?

MVC Modelについて、調べると画面に表示する内容を作るようなメインのロジックは、Modelで行うらしい。恐らく、今回作成したアプリのpublic void onClick(View v)関数の中身が該当する?
本来は、画面に対応するModelクラス実装し、ボタン押下時に走る処理はその中に記述する...のが望ましい?

所感 2. ボタン押下時のコールバック登録記述が長い

下記のようにも書いて改善できるらしい。
buttonClickは、関数オブジェクトというらしい?

public class MainActivity extends AppCompatActivity {
    private TextView text;
    private Button button;

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

        // TextViewを取得
        text = (TextView)findViewById(R.id.text);

        // Buttonを取得
        button = (Button)findViewById(R.id.button);

        // Buttonをタップされた時の処理
        button.setOnClickListener(buttonClick);
    }

    private View.OnClickListener buttonClick = new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            text.setText("Click!!");
        }
    };
}
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0