Android View事件
14006 ワード
以上のタッチイベント、キーイベントとは異なり、各ビューに独自のアクティビティがあります.
ビューイベント処理構造
ビューイベント処理構造
ビューイベント処理は이벤트 소스
、이벤트 핸들러
に分けられ、イベントを処理するには리스너
に接続する必要があります.
≪イベント・ソース|Event Source|ldap≫:イベントが発生したオブジェクト
≪イベント・ハンドラ|Event Handler|ldap≫:イベントが発生したときに実行する論理を含むオブジェクト
リスナー:イベント・ソースとイベント・ハンドラを関連付ける関数
構造はそうであるが、コードはイベントハンドラをイベントソースに登録する形式である.checkBoxイベントを見てみましょう.CompoundButtonクラスは次のインタフェースを定義しています. public static interface OnCheckedChangeListener {
void onCheckedChanged(CompoundButton buttonView, boolean isChecked);
}
このインタフェースで定義されているインタフェースはイベントハンドルです.イベントハンドラ内部で定義された関数onCheckedChanged(CompoundButton buttonView, boolean isChecked)
を定義し、検査状態での動作を構成する.
次に、リスナーを定義し、対応するプロセッサにイベントソースを関連付ける方法を見てみましょう. override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
val binding = ActivityMainBinding.inflate(layoutInflater)
setContentView(binding.root)
binding.checkbox.setOnCheckedChangeListener { buttonView, isChecked ->
if (isChecked) {
Log.d("info", "Checked")
} else {
Log.d("info", "Not Checked")
}
}
}
binding.checkbox
はイベントソースであり、ビューから呼び出されたsetOnCheckedChangeListener {buttonView, isChecked -> ...}
関数はリスナーとしてロールを実行する.ここではSAM機能を利用しています.
以上の構成から,Activity自体がComponentButtonであることが分かる.OnCheckdChangeListenerを実装し、関連する関数を上書きする方法も使用できます.あるいは、いっそ別のクラスを作成して処理します.class MainActivity : AppCompatActivity(), CompoundButton.OnCheckedChangeListener {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
val binding = ActivityMainBinding.inflate(layoutInflater)
setContentView(binding.root)
binding.checkbox.setOnCheckedChangeListener(this)
}
override fun onCheckedChanged(buttonView: CompoundButton?, isChecked: Boolean) {
Log.d("info", "called")
}
}
クリックとロングクリックイベントの処理
Androidには様々なビューがあり、各ビューには独自のイベントがあります.しかし,すべてのViewイベントは同じ処理構造を有しているため,イベントの処理は困難ではない.他のクリックを表示し、イベント処理を長クリックします.
2つのアクティビティのテナント構造は次のとおりです.ビューで定義されたOnClickListenerハンドルとOnLongClickListenerハンドルをそれぞれパラメータとして使用します.open fun setOnClickListener(l: View.OnClickListener?): Unit
open fun setOnLongClickListener(l: View.OnLongClickListener?): Unit
各HandlerインタフェースはSAMを満たすための抽象的な方法しかない.public interface OnClickListener {
void onClick(View v);
}
public interface OnLongClickListener {
boolean onLongClick(View v);
}
ここではリスナーのコードを直接実装し,LongClickはSAM方式,Clickはインタフェースを直接実装する方式で実装した.class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
val binding = ActivityMainBinding.inflate(layoutInflater)
setContentView(binding.root)
binding.myButton.setOnClickListener(View.OnClickListener { Log.d("info", "just tap") })
binding.myButton.setOnLongClickListener {
Log.d("info","Long tap")
true
}
}
}
SAM (Single Abstract Method)
1つの方法で定義されたインタフェースのみが関数インタフェースまたはSAMインタフェースと呼ばれます.彼らがどれだけの実現方法を持っていても、1つの未実現の方法があれば、条件を満たしています.
Kotlinは次のように定義されています.インターフェースの特徴は、funキーワードが前に付いていることです.fun interface IntPredicate {
fun accept(i: Int): Boolean
}
lambda形式でsamを変換する機能を使用しない場合は、直接宣言して実装する必要があります.val isEven = object : IntPredicate {
override fun accept(i: Int): Boolean {
return i % 2 == 0
}
}
samの場合、lambda式に変換できるため、次の行に処理できます.val isEven = IntPredicate { it % 2 == 0 } // SAM lambda 표현식은 맨 마지막 줄을 return 문으로 인식하게끔 되어있다.
チェックボックスハンドルを定義する場合、このオブジェクトはSAMであるため、lambda式が適用されます.
Reference
この問題について(Android View事件), 我々は、より多くの情報をここで見つけました
https://velog.io/@tjeong/Android-View-이벤트
テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol
public static interface OnCheckedChangeListener {
void onCheckedChanged(CompoundButton buttonView, boolean isChecked);
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
val binding = ActivityMainBinding.inflate(layoutInflater)
setContentView(binding.root)
binding.checkbox.setOnCheckedChangeListener { buttonView, isChecked ->
if (isChecked) {
Log.d("info", "Checked")
} else {
Log.d("info", "Not Checked")
}
}
}
class MainActivity : AppCompatActivity(), CompoundButton.OnCheckedChangeListener {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
val binding = ActivityMainBinding.inflate(layoutInflater)
setContentView(binding.root)
binding.checkbox.setOnCheckedChangeListener(this)
}
override fun onCheckedChanged(buttonView: CompoundButton?, isChecked: Boolean) {
Log.d("info", "called")
}
}
Androidには様々なビューがあり、各ビューには独自のイベントがあります.しかし,すべてのViewイベントは同じ処理構造を有しているため,イベントの処理は困難ではない.他のクリックを表示し、イベント処理を長クリックします.
2つのアクティビティのテナント構造は次のとおりです.ビューで定義されたOnClickListenerハンドルとOnLongClickListenerハンドルをそれぞれパラメータとして使用します.
open fun setOnClickListener(l: View.OnClickListener?): Unit
open fun setOnLongClickListener(l: View.OnLongClickListener?): Unit
各HandlerインタフェースはSAMを満たすための抽象的な方法しかない.public interface OnClickListener {
void onClick(View v);
}
public interface OnLongClickListener {
boolean onLongClick(View v);
}
ここではリスナーのコードを直接実装し,LongClickはSAM方式,Clickはインタフェースを直接実装する方式で実装した.class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
val binding = ActivityMainBinding.inflate(layoutInflater)
setContentView(binding.root)
binding.myButton.setOnClickListener(View.OnClickListener { Log.d("info", "just tap") })
binding.myButton.setOnLongClickListener {
Log.d("info","Long tap")
true
}
}
}
SAM (Single Abstract Method)
1つの方法で定義されたインタフェースのみが関数インタフェースまたはSAMインタフェースと呼ばれます.彼らがどれだけの実現方法を持っていても、1つの未実現の方法があれば、条件を満たしています.
Kotlinは次のように定義されています.インターフェースの特徴は、funキーワードが前に付いていることです.fun interface IntPredicate {
fun accept(i: Int): Boolean
}
lambda形式でsamを変換する機能を使用しない場合は、直接宣言して実装する必要があります.val isEven = object : IntPredicate {
override fun accept(i: Int): Boolean {
return i % 2 == 0
}
}
samの場合、lambda式に変換できるため、次の行に処理できます.val isEven = IntPredicate { it % 2 == 0 } // SAM lambda 표현식은 맨 마지막 줄을 return 문으로 인식하게끔 되어있다.
チェックボックスハンドルを定義する場合、このオブジェクトはSAMであるため、lambda式が適用されます.
Reference
この問題について(Android View事件), 我々は、より多くの情報をここで見つけました
https://velog.io/@tjeong/Android-View-이벤트
テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol
fun interface IntPredicate {
fun accept(i: Int): Boolean
}
val isEven = object : IntPredicate {
override fun accept(i: Int): Boolean {
return i % 2 == 0
}
}
val isEven = IntPredicate { it % 2 == 0 } // SAM lambda 표현식은 맨 마지막 줄을 return 문으로 인식하게끔 되어있다.
Reference
この問題について(Android View事件), 我々は、より多くの情報をここで見つけました https://velog.io/@tjeong/Android-View-이벤트テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol