1

Android 4.0用の9つのボタンを備えたアプリケーションを作成したいのですが、各ボタンが押されたときにメソッドを呼び出し、離されときに別のメソッドを呼び出す必要があります。

今説明したことを達成するための本当に簡単な方法がないことに少し驚いていますが、スタックオーバーフローで読んだいくつかの質問と回答のおかげで、示されているように、各ボタンにリスナーを追加することで必要なことを達成することができました次のコードのボタンの 1 つです。

buttonUp.setOnTouchListener(new OnTouchListener() {
    public boolean onTouch(View v, MotionEvent event) {
        if(event.getAction() == MotionEvent.ACTION_DOWN) {
            buttonUpPressed();
        } else if (event.getAction() == MotionEvent.ACTION_UP) {
            buttonUpReleased();
        }                
        return true;
    }           
});

すべてのボタンにリスナーを追加することなく、この動作を実現する代替手段があるかどうかを知りたいです。私はそれをリソースと多くのコーディングの無駄だと考えています。最終的にボタンを追加する必要があるかどうかは想像できません。

そのため、どんな助けもいただければ幸いです。

4

2 に答える 2

0

すべてのボタンを配列または ArrayList に追加してから、クラスでリスナー フィールドを定義できます。

OnTouchListener oclButtons = new OnTouchListener(...);

次に、ArrayList 内のすべてのボタンに同じリスナーを追加できます。

for (Button b : listOfButtons) {
    b.setOnTouchListener(oclButtons);
}

各ボタンに ID を設定する代わりに、タグを取得/設定することもできます (各ビューには一意の ID が必要なため)。リスナーは、v.getTag() を使用して、どのボタンがタッチされたかを判断できます。

于 2012-12-11T04:31:52.710 に答える
0

クラスを OnTouchListener で実装します

Button a,b;
        Button[] bArray = {a,b};
        for (int i = 0; i < bArray.length; i++) {
            bArray[i].setOnTouchListener(this)
        }

その後、未実装のメソッドを追加

@Override
    public boolean onTouch(View v, MotionEvent event) {
        // TODO Auto-generated method stub
            if(event.getAction() == MotionEvent.ACTION_DOWN){
                switch (v.getId()) {
                case R.id.button1:

                    break;

                default:
                    break;
                }
            }
            else if(event.getAction() == MotionEvent.ACTION_UP){
                switch (v.getId()) {
                case R.id.button1:

                    break;

                default:
                    break;
                }
            }
        return false;
    }

あなたが私の論理を気に入ってくれることを願っています:)

于 2012-12-11T04:50:00.897 に答える