1

ボタンがクリックされたときに何かを実行したい場合、2 つの方法の違いは何ですか? 最初のものははるかに単純に見えます。

レイアウト中

<Button xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/button_send"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/button_send"
android:onClick="sendMessage" />

活動中

public void sendMessage(View v) {
 // do whatever
}

また

private OnClickListener listener = new OnClickListener() {
   public void onClick(View v) {
     // do whatever
   }
};

protected void onCreate(Bundle savedValues) {
    // Capture our button from layout
    Button button = (Button)findViewById(R.id.mybutton);
    // Register the onClick listener with the implementation above
    button.setOnClickListener(listener);
}
4

1 に答える 1

1

この質問にはいくつかの部分があります: パフォーマンス、保守性、および個人的な好みです。

  1. パフォーマンス: xml メソッドを使用すると、フレームワークがリフレクションを使用してクラスのメソッドを呼び出す必要があるため、パフォーマンスが低下します。ジンジャーブレッド以上は問題ないはずですが(より良いjit)、それ以前は違いが顕著でした.

  2. xml メソッドは、プレゼンテーション レイヤー内に「コード」(メソッド名) を配置するため、保守性が低いと私は考えています。どのハンドラーがどこに設定されているかを解明するには、開発者が追加するのを忘れがちな、勤勉なコメントが必要です。

  3. 2 と同様に、フィールドの割り当て (findViewById) とイベント ハンドラーを同じ場所で行うと、"ビューの初期化" 領域があるため、はるかに明確になると思います。ファイル間で分割することは、私にとっては拷問のように感じます。ビュー/依存性注入を使用するとさらに優れています。

PS リスナーをフィールドに割り当てる必要はありません。アクティビティ/フラグメントの単一のメソッドを呼び出す匿名クラスを使用する方がクリーンです。

于 2013-05-26T23:01:35.467 に答える