[解決済み] Android:ボタンクリックの処理方法
質問
JavaやAndroid以外の分野での経験があり、Androidを勉強中です。
いろいろなところで戸惑うことが多いのですが、その一つがボタンのクリックをどう処理するかということです。少なくとも4つの方法(!!)があり、それらは簡単にリストアップされています。 ここで
一貫性を保つために、それらを列挙します。
-
のメンバーを持っていること。
View.OnClickListener
を処理するインスタンスに割り当ててください。onClick
のロジックはonCreate
アクティビティメソッド -
onCreate」アクティビティメソッドで「onClickListener」を作成し、「setOnClickListener」を使ってボタンに割り当てます。
-
アクティビティ自体に'onClickListener'を実装し、ボタンのリスナーとして'this'をアサインします。アクティビティにボタンがいくつかある場合、ボタンIDを解析して、適切なボタンの 'onClick' ハンドラを実行する必要があります。
-
onClick」ロジックを実装するアクティビティにパブリックメソッドを用意し、アクティビティxml宣言でそれをボタンに割り当てます。
質問1:
これらの方法はすべて、他の選択肢はないのでしょうか?(他に必要ないのですが、ちょっと気になるので)。
私にとっては、最も直感的な方法は最新のものでしょう。タイプするコードの量が最も少なく、(少なくとも私にとっては)最も読みやすい方法です。
でも、この方法はあまり使われていないようですね。短所は何でしょうか?
質問その2.
それぞれの方法の長所と短所を教えてください。あなたの経験や良いリンクのいずれかを共有してください。
どんな意見でも歓迎します。
P.S.このトピックについてググってみたのですが、私が見つけたのは、なぜそれが良いのか悪いのかではなく、それを行うための方法についての説明だけでした。
解決方法は?
質問1. あなたが最も直感的だと言うものは、残念ながらAndroidでは最も使われていないものです。UI(XML)と計算機能(Javaクラスファイル)を分離した方が良いと理解しています。その方がデバッグもしやすくなります。この方法で読むと、実はAndroidを考えるのがとても簡単なんです。
質問2. 主に使われるのは、2番と3番だと思います。例としてButtonのclickButtonを使用します。
2
は無名クラスの形式をとっています。
Button clickButton = (Button) findViewById(R.id.clickButton);
clickButton.setOnClickListener( new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
***Do what you want with the click here***
}
});
これは、findViewByIdでボタン変数が設定された場所のすぐ隣にonClickメソッドがあるので、私のお気に入りです。このclickButton Button Viewを処理するすべてがここにあるというのは、とてもすっきりとした印象を受けます。
私の同僚がコメントしている欠点は、onclickリスナーを必要とする多くのビューがあることを想像することです。あなたは、あなたのonCreateが非常に長くなることを見ることができます。だから彼はそれを使用するのが好きです。
3
例えば、5つのクリックボタンがあるとします。
アクティビティ/フラグメントがOnClickListenerを実装していることを確認します。
// in OnCreate
Button mClickButton1 = (Button)findViewById(R.id.clickButton1);
mClickButton1.setOnClickListener(this);
Button mClickButton2 = (Button)findViewById(R.id.clickButton2);
mClickButton2.setOnClickListener(this);
Button mClickButton3 = (Button)findViewById(R.id.clickButton3);
mClickButton3.setOnClickListener(this);
Button mClickButton4 = (Button)findViewById(R.id.clickButton4);
mClickButton4.setOnClickListener(this);
Button mClickButton5 = (Button)findViewById(R.id.clickButton5);
mClickButton5.setOnClickListener(this);
// somewhere else in your code
public void onClick(View v) {
switch (v.getId()) {
case R.id.clickButton1: {
// do something for button 1 click
break;
}
case R.id.clickButton2: {
// do something for button 2 click
break;
}
//.... etc
}
}
この方法は、onClickの計算がすべて一箇所で処理され、onCreateメソッドを混雑させないので、彼の目にはすっきり見えると同僚は説明しています。しかし、私が考える欠点は、onCreateメソッドに問題があることです。
- ビューそのものです。
- と、onClickメソッドで使用されるonCreateに配置される可能性のある他のオブジェクトは、フィールドにする必要があります。
もっと詳しい情報をお望みでしたら、教えてください。かなり長い質問なので、十分に答えていません。また、いくつかのサイトを見つけたら、私の答えを拡大するつもりですが、今私はいくつかの経験を与えただけです。
関連
-
[解決済み] トークンのシンタックスエラー、これらのトークンを削除してください [closed].
-
[解決済み] 要素 'beans' の宣言が見つかりません。
-
[解決済み] Androidのソフトキーボードをプログラムで閉じる/隠すにはどうすればよいですか?
-
[解決済み] Androidでアクティビティ起動時にEditTextにフォーカスが当たらないようにする方法
-
[解決済み] java.net.URLConnectionを使用してHTTPリクエストを発生させ処理する方法
-
[解決済み] Eclipseにプロジェクトをインポートした後に「Must Override a Superclass Method」エラーが発生する。
-
[解決済み] アプリケーションを終了することは嫌われますか?
-
[解決済み] AndroidでstartActivityForResultを管理する方法
-
[解決済み】Android UserManager.isUserAGoat()の正しい使用例?)
-
[解決済み】フラグメント内のXML onClickを使用して、ボタンのクリックを処理する方法
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] tempとは何ですか、またjavaにおけるtempの用途は何ですか?
-
[解決済み] JVMフラグCMSClassUnloadingEnabledは、実際に何をするのですか?
-
[解決済み] getContentPane()は具体的に何をするのですか?
-
[解決済み] Application startメソッドで例外が発生する。JavaFx 11
-
[解決済み] パラメータ[変数]の不正な修飾子;finalのみが許可される[closed]。
-
[解決済み] Androidのコールバックとは何ですか?重複
-
[解決済み] Eclipse- Dynamic Web Module 3.0 で新しいプロジェクトを作成するときに Java 1.6 以降が必要なエラーが発生する。
-
[解決済み] Apache Camelのログに簡単なテキストを記録する
-
[解決済み] java.lang.ClassCastException: java.lang.Long を java.lang.Integer にキャストできない(java 1.6
-
[解決済み] .lengthが解決できない、またはフィールドでない