[解決済み] android:onClick XML属性とsetOnClickListenerは具体的にどのように違うのですか?
質問
私が読んだ限りでは、このような場合は
onClick
ハンドラをボタンに割り当てるには、2つの方法があります。
を使用する
android:onClick
XML 属性で、パブリック メソッドの名前をシグネチャとして使用します。
void name(View v)
を使用するか、あるいは
setOnClickListener
メソッドを実装したオブジェクトを渡します。
OnClickListener
インターフェイスを使用します。後者の場合、個人的には好きではない無名クラスが必要になることが多いのですが(個人的な趣味です)、内部クラスで
OnClickListener
.
XML属性を使用すると、クラスの代わりにメソッドを定義するだけでよいのです。 同じことをXMLレイアウトではなく、コードで行うことができるのか疑問に思っています。
どのように解決するのですか?
いいえ、それはコードで可能ではありません。Androidでは
OnClickListener
を定義する際に
android:onClick="someMethod"
属性を使用します。
この2つのコードスニペットは、2つの異なる方法で実装されているだけで、同じものです。
コードの実装
Button btn = (Button) findViewById(R.id.mybutton);
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
myFancyMethod(v);
}
});
// some more code
public void myFancyMethod(View v) {
// does something very interesting
}
上記は
OnClickListener
. そして、これがXMLの実装です。
XMLの実装
<?xml version="1.0" encoding="utf-8"?>
<!-- layout elements -->
<Button android:id="@+id/mybutton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Click me!"
android:onClick="myFancyMethod" />
<!-- even more layout elements -->
バックグラウンドでは、AndroidはJavaのコード以外何もせず、クリックイベントであなたのメソッドを呼び出します。
上記のXMLでは、Androidは
onClick
メソッド
myFancyMethod()
は、現在のActivityの中だけです。フラグメントを使って上記のXMLを追加しても、Androidは
onClick
メソッドを
.java
ファイルを作成し、XML を追加するために使用します。
もう一つ重要なことに気づきました。あなたは、匿名の メソッド . あなたが言いたかったのは、匿名の クラス .
関連
-
AndroidでAttempt to invoke virtual method... on null object referenceの例外が発生する。
-
android.os の NetworkOnMainThreadException。
-
AndroidStudio reports Could not resolve all artifacts for configuration ':app:classpath'.
-
cygwinのダウンロード、インストールチュートリアル、およびCDTの「makeプログラムがパスに見つからない」バグの解消
-
GIF、Lottie、SVGA
-
アプリケーションがメインスレッドで過剰に作業している可能性があります。
-
SpinnerのOnItemSelectedListenerのonItemSelectedメソッドの4つのパラメーターの意味
-
AndroidStudioのショートカット 検索/置換
-
[解決済み] Android:ボタンクリックの処理方法
-
[解決済み] 既存のカスタムテーマでXMLのアクティビティのタイトルバーを非表示にする方法
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
Androidのadbデバイスがオフラインであることが判明
-
Android Nで報告されたエラーを解決する: android.os.FileUriExposedException: file:///storage/emulated/0/
-
GoogleMapと連携し、位置情報の取得が可能
-
Android TextViewにandroid:ellipsize=endのバグがある。
-
android bluetooth--Bluetooth on、検索、ペアリング、接続
-
SpinnerのOnItemSelectedListenerのonItemSelectedメソッドの4つのパラメーターの意味
-
アンドロイドスタジオ学習入門
-
AndroidStudioのショートカット 検索/置換
-
Android Studioのgitの使用とgitの設定パス
-
[解決済み] Java Reflectionのパフォーマンス