1

オンクリック リスナーを設定していますが、これで問題ないのでしょうか? 多くの人が setOnClickListener に沿って onClickListener を定義しているのを見ますが、それは非常に面倒なので、この方法で問題が発生するかどうか疑問に思っていましたか?

public class Login extends Activity {

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

    login = (Button) findViewById(R.id.loginButton);
    login.setOnClickListener(myOnClick());
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.activity_login, menu);
    return true;
}

protected OnClickListener myOnClick() {
    OnClickListener v = new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            //Do stuff
        }
    };

    return v;
}

}
4

4 に答える 4

3

それをどのように定義するかは、個人的なコーディング スタイルの選択です。クラス全体でインターフェイスを実装したり、インラインで実行したり、実行しているように実行したり、XML 経由で呼び出されるメソッドを指定したりできます。最終結果はほぼ同じです。

于 2012-12-25T17:57:33.720 に答える
0

すべての onclicklistener メソッドを 1 つのメソッド内に保持したい場合は、そのメソッドを実装できます。このためにあなたは

login.setOnClickListener(これ);

その後

extends Activity implements OnClickListener

最後に、未実装のメソッドを追加します。これにより、すべてのボタンクリックが onclick メソッドに渡され、if/else または switch/case を使用して任意のメソッドを割り当てることができます。

または、XML で定義するか、説明した方法を使用することもできます。

ただし、利点と欠点について説明すると、xml 内で onClick を定義すると、proguard で問題が発生する可能性があります。個人的には、onclicklistener 内でスイッチとケースを使用するのが最も簡単だと思いますが、メソッドが非常に長い場合は、独自のメソッドを指定して「非表示」にするのが良いでしょう。ただし、ボタンが押された後に実行する一般的なコードが必要な場合 (UI の更新など)、スイッチとケースまたは if/else に任せた方がよい場合があります。

// xml と proguard 内で OnClick を使用したい人のために追加するだけです

これを追加:

-keepclassmembers class * extends android.app.Activity { public void *(android.view.View); }

于 2012-12-25T18:04:27.683 に答える
0

コード スタイルによって異なりますが、次のようになります。

  1. 多くのボタンに同じメソッドを使用したい: クラスにリスナー インターフェイスを実装させ、ビュー ID のスイッチを使用してどのボタンがクリックされたかを調べます。

  2. 本当に複雑なロジックがクリックに続きます。内部/外部クラスにそのリスナーを実装させます。

  3. 数行、特別なことは何もありません: インラインで行えば、コードを読んでいる人は小さなコードを探しに行く必要はありません。

于 2012-12-25T18:16:53.913 に答える
0

ビューに実装する方法は複数ありonClickListnerます。あなたが使用したものも正しいものであり、あなたに何の問題も生じません. 私が個人的に好むのはOnClickListener interface、オーバーライド onClick メソッド内でクラスにスイッチ ケース シナリオを実装して使用させることです。

例えば

public class LoginExampleImplements extends Activity implements OnClickListener { 


    @Override
    public void onCreate(Bundle savedInstanceState) { 
        super.onCreate(savedInstanceState); 

    ...         

        btn1 = (Button)findViewById(R.id.btn1);
        btn2 = (Button)findViewById(R.id.btn2);

// Set Click Listener 


        btn1.setOnClickListener(this); 
        btn2.setOnClickListener(this); 
    } 

    @Override
    public void onClick(View v) { 

        switch(v.getId()){
           case R.id.btn1:
             // do stuff related btn1 click
             break;
           case R.id.btn2:
             // do stuff related btn2 click
             break;
         }

    }
于 2012-12-25T18:09:26.497 に答える