ソース掲示板




すべてから検索

キーワード   条件 表示 現行ログ 過去ログ トピックス 名前 本文

  メンテナンス 前画面に戻る

対象スレッド 件名: イベント用のプライベートクラスを作ってボタンに登録する
名前: lightbox
処理選択
パスワード

件名 イベント用のプライベートクラスを作ってボタンに登録する
名前 lightbox
コメント
@DIV
package lightbox.april.android2test;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.View;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {

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

		MainActivity.this.findViewById(R.id.button).setOnClickListener(new @c:red(MyButton)());

	}

	private class @c:red(MyButton) implements View.OnClickListener {
		@Override
		public void onClick(View v) {

			// logcat にメッセージを表示
			Log.i("lightbox", "ボタンが押されました");

			// トーストを表示
			Toast.makeText(MainActivity.this, "ボタンが押されました", Toast.LENGTH_LONG).show();
		}
	}
}
@END

@SHOW
元々、new View.OnClickListener() としてイベント登録していたのはインターフェイスです。この場合は同じインターフェイスを持つ@c:red(MyButton) という、イベントの処理しか出来ないクラスを作って使用しているだけなので、このままでは大差はありませんが、MyButton に何かオリジナルのメソッドを加えて行けば、標準化の方法として拡張して行く事ができると思います
@END

[[▼ 複数のボタンでイベント処理を共用する]]
@DIV
package lightbox.april.android2test;

import android.content.Context;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {

	private MyButton my_button;

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

		my_button = new MyButton();
		MainActivity.this.findViewById(R.id.button).setOnClickListener(my_button);
		MainActivity.this.findViewById(R.id.button2).setOnClickListener(my_button);

		my_button.testMessage(MainActivity.this,"初期処理が終了しました");

	}

	private class MyButton implements View.OnClickListener {
		@Override
		public void onClick(View v) {
			String s = ((Button)v).getText().toString();
			s = String.format("%s : ボタンが押されました",s);
			testMessage(MainActivity.this,s);
		}

		public void testMessage(Context context, String s ) {

			// logcat にメッセージを表示
			Log.i("lightbox", s);

			// トーストを表示
			Toast.makeText(context, s, Toast.LENGTH_LONG).show();

		}
	}
}
@END

@SHOW
ここでは、結果がわかりやすいように、View からボタンの文字列を取得していますが、実際は id を取得してその値によって処理を分けます。
@END