0

ボタンのクリックをキャプチャするのは誰ですか?

final Button button = (Button) findViewById(R.id.button1);
button.setOnClickListener(new View.OnClickListener() {
       public void onClick(View v) {
            Toast.makeText(WHKConversorActivity.this, "Hello World", Toast.LENGTH_SHORT).show();                    
       }
 });

これはbutton1をクリックしますが、すべてのボタンの関数が必要です:-/。javascriptの例:

$('button').click(function(){
    alert($(this).val());
});

ありがとう :)

4

5 に答える 5

3

すべてのボタンでまったく同じことを実行したい場合(可能性は低いですが)、同じクリックリスナーを各ボタンにバインドできます。例えば:

final Button button = (Button) findViewById(R.id.button1);
button.setOnClickListener(mGlobalClick);

final Button button2 = (Button) findViewById(R.id.button2);
button2.setOnClickListener(mGlobalClick);

... ect

OnClickListener mGlobalListener = new OnClickListener() {

    @Override
    public void onClick(View v) {
            //Stuff
            }
};

または、各ボタンで異なる処理を実行したいが、それぞれに何らかの繰り返し関数が必要な場合は、コードのその部分を個別のメソッドに入れて、すべてのクリックリスナーで参照できます。

public void GlobalStuff(){
     //Stuff
}

OnClickListener mSpecificListener = new OnClickListener() {

    @Override
    public void onClick(View v) {
            GlobalStuff();
            //More Stuff
            }
};
于 2012-08-02T14:08:05.057 に答える
1

アクティビティ内のすべてのビューが何らかのViewGroupにあると仮定すると、次のように使用できます。

private void applyToAllButtons(ViewGroup viewGroup, OnClickListener listener) {
    for (int i = 0; i < viewGroup.getChildCount(); i++) {
        if (viewGroup.getChildAt(i) instanceof Button) {
            viewGroup.getChildAt(i).setOnClickListener(listener);
        }
    }
}

次に、onCreate()で次の手順を実行します。

@Override
public void onCreate(Bundle savedInstanceState) {
    ... // old code here
    View view = findViewById(R.id.layoutRoot);
    setContentView(view);
    OnClickListener listener = new OnClickListener() {
        public void onClick(View v) {
            // Do stuff here.
        }
    };
    applyToAllButtons((ViewGroup) view, listener);
}
于 2012-08-02T14:14:07.237 に答える
0

javascriptのような一般的な方法はありません。クリックハンドラーをすべてのボタンに個別に割り当てる必要があります。

于 2012-08-02T13:58:27.633 に答える
0

クラスをオーバーライドして、コンストラクターでButtonを呼び出すことができます。addListener

于 2012-08-02T13:59:45.540 に答える
0

ジャックに感謝します...これはもっと便利です:)変数が少なく、メモリが少なくて済みます。OnClickListenerはtiggersの前に置かれます:

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        OnClickListener globalClick = new View.OnClickListener() {
            public void onClick(View v) {
                // some functions...
            }
        };

        /* Tiggers */
        findViewById(R.id.button1).setOnClickListener(globalClick);
        findViewById(R.id.button2).setOnClickListener(globalClick);
        findViewById(R.id.button3).setOnClickListener(globalClick);
        findViewById(R.id.button4).setOnClickListener(globalClick);
        findViewById(R.id.button5).setOnClickListener(globalClick);
}
于 2012-08-02T15:02:09.193 に答える