android-kjava/kotolinでのイベントリスナー登録の各種方法

ボタンのonClikのコールバックのリスナーを使って普通に書くとこう。文字列は本当はリソース(例えばstring.xmlからだと@strind/buttondownmes)から持ってこないといけないけど。
レイアウトエディターのデザイン画面でbuttonとtextViewを入れた素の状態から。textViewは"Hello World!"が定義されてたら、idにtextViewって書けばok。

public class MainActivity extends AppCompatActivity {

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

		// ここからがonClicイベントへのイベントリスナー登録と実装
		Button btn = findViewById(R.id.button);
		class MyListener implements View.OnClickListener {
			@Override
			public void onClick(View view) {
				TextView txt = findViewById(R.id.textView);
				txt.setText("ボタンが押されたよ");
			}
		}
		btn.setOnClickListener(new MyListener());
	}
}


匿名クラスをつかうとこう。匿名って言うか自分は使い捨てでその場限りだから無名クラスって言うけど、わざわざMyListenerとか、名前を考えなくて良いのが良い。

	// ここからがonClicイベントへのイベントリスナー登録と実装
	Button btn = findViewById(R.id.button);
	btn.setOnClickListener(new View.OnClickListener() {
		@Override
		public void onClick(View v) {
			TextView txt = findViewById(R.id.textView);
			txt.setText("ボタンが押されたよ");
		}
	});



ラムダ式を使うとここまで縮まる。
ラムダ式はJAVA8からだから、[file]-[Project Structre]の[Modules]ペインで[Sourec Compatibility]と[Target Compatibility]で、1.8(JAVA8)以上を選ばないと使えない。
ラムダ式は現場によっては不許可だから、あまり亜すすめではありません。

	// ここからがonClicイベントへのイベントリスナー登録と実装
	Button btn = findViewById(R.id.button);
	btn.setOnClickListener(view->{
		TextView txt = findViewById(R.id.textView);
		txt.setText("ボタンが押されたよ");
	});


kotolinはこう。importは補完で入れてくれると思う。

import kotlinx.android.synthetic.main.activity_main.*

class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        button.setOnClickListener{
            textView.setText("ボタンが押されたよ");
        }
    }
}


以上です。


戻る