お題 1:ボタンを押してテキストを更新する
1-1. イメージ
下記のような画面を実装する。
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!!");
}
};
}