1

たくさんの画像を含むレイアウトがあります。私がしなければならないことは、画像がクリックされたときにその詳細を表示することです。しかし、すべての画像に onClickListeners を使用したくありません。どうすればこれを達成できますか?

4

3 に答える 3

3

すべての画像に対して異なるハンドラーを用意する必要はありません。代わりに、すべての画像に対して 1 つのハンドラーを使用します。これにより、コードがよりクリーンで管理しやすくなり、問題も解決します。

public void onCreate(Bundle bundle) {
    //...

    OnClickListener mHandler = new OnClickListener() {
        @Override
        public void onClick(View v) {
            switch(v.getId()) {
                case R.id.img1:
                    //..
                    break;

                case R.id.img2:
                    //....
                    break;
            }
        }
    };

    ImageButton btn1 = (ImageButton)findViewById(R.id.img1);
    ImageButton btn2 = (ImageButton)findViewById(R.id.img2);
    //...

    btn1.SetOnClickListener(mHandler);
    btn2.SetOnClickListener(mHandler);
    //...
}
于 2013-04-02T14:09:13.890 に答える
2

Listenerそれらすべてを支配する1つ。

  1. onClick()オブジェクトに実装し、リスナーとして登録

  2. で、パラメータとして渡されonClick()たオブジェクトを調べて、どの画像がクリックされたかを判断します。キャストして実際の画像を取得することまで、View何でもできます。getId()(ImageView)

  3. どの画像がクリックされたかがわかったら、それを使って何をしますか。

于 2013-04-02T14:11:08.443 に答える
0

(または何でも)のカスタム動作を実装しようとしていてImageView、そのタイプのビューの複数のインスタンスがある場合は、をサブクラス化しImageView、そこにリスナーを配置する必要があります。これで、必要なカスタム動作を実装するカプセル化された が得Viewられます。後でそれらを増やしたり減らしたり、別の場所に配置したりした場合は、Viewとその動作を簡単に移動できますActivity

于 2013-04-02T14:11:37.663 に答える