Android菜鳥離陸|3つの方法で事件の傍受を実現

5319 ワード

Androidがリスニングイベントを実現する3つの方式(匿名内部実装,外部クラス実装,インタフェース実装)の詳細
1.匿名内部クラスによるリスニングイベントの実装
使用方法:
  • は、まず、リスニングを実行するオブジェクトのためにリスナーをバインドし、例えば、1つのButtonオブジェクトのためにリスナーbotton.setOnClickListener();をバインドする.
  • は、次いで、setOnClickListener()メソッドにおいてOnClickListenerの匿名の内部クラスを定義し、その後、内部クラスのonClickメソッドを書き換える.
  • 最後に、onClickメソッドにおいて、リスニングイベントを実装する論理を実装すればよい.詳細は以下のDemoコードを参照してください.

  • 2.外部クラスによるリスニングイベントの実装
    使用方法:
  • まず外部クラスをカスタマイズし、OnClickListenerインタフェースを実装し、onClickメソッドを書き換える.onClickメソッドでは、この外部クラスが実装したい処理ロジックを定義することができ、この外部クラスを呼び出してリスニングイベントを実装する場合、superでこのクラスの処理ロジックを呼び出すことができる.これも外部クラスを使用してリスニングイベントを実現する利点です.異なるリスニングイベントで大量に繰り返される処理ロジックをこのクラスに定義し、この外部クラスを使用してリスニングイベントを実現する際にsuperキーワードを使用して直接呼び出すことができます.繰り返しの意味を使用せずに、重複コードを減らし、コードの品質を高めることができます.
  • リスニングを実装するオブジェクトにリスナーをバインドし、setOnClickListener()メソッドでカスタム外部クラスを使用してリスニングイベントを実装します.
  • onClickメソッドを書き換え、必要に応じてsuperを使用して親処理ロジックを呼び出す必要があるかどうかを決定し、onClickメソッドで独自の処理ロジックを定義します.詳細は以下のDemoコードを参照してください.

  • 3.インタフェース方式によるリスニングイベントの実現
    使用方法:
  • 現在のクラスにOnClickListenerインタフェースを実装させ、現在のクラスでonClickメソッドを書き換える.
  • は、現在のクラスのonClickメソッドにおいて処理ロジックを実装する.
  • リスニングイベントを実装する必要があるコントロールにリスナーをバインドし、thisを使用してこのクラスで書き換えられたonClickメソッドを呼び出します.詳細は以下のDemoコードを参照してください.

  • Demo
    layout_mainは以下の通りです.レイアウトファイルでは、3つのButtonを定義し、それぞれ3つの異なる方法でリスニングイベントを実現し、各Buttonに対してTextViewを定義し、リスニングイベントの処理ロジックが成功したかどうかを観察します.
    
        

    MianActivity代码如下:
    在MainActivity中我分别以三种不同的方式为每一个Button实现了监听事件,并未外部类实现方式中加入了外部类自己的处理逻辑。

    public class MainActivity extends AppCompatActivity implements View.OnClickListener{
        private Button bt1;
        private Button bt2;
        private Button bt3;
        private TextView tv1;
        private TextView tv2;
        private TextView tv3;
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            bt1 = (Button)findViewById(R.id.button1);
            bt2 = (Button)findViewById(R.id.button2);
            bt3 = (Button)findViewById(R.id.button3);
            tv1 =(TextView)findViewById(R.id.textView1);
            tv2 = (TextView)findViewById(R.id.textView2);
            tv3 =(TextView)findViewById(R.id.textView3);
    
            //1.                
            bt1.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    tv1.setText("                  ");
                }
            });
    
            //2.              
            bt2.setOnClickListener(new MyOnClickListener() {
                @Override
                public void onClick(View v) {
                    //  super             ,      。
                    super.onClick(v);
                    tv2.setText("                ");
                }
            });
    
            //3.            
            //           ,    this    OnClickListener    onClick  
            bt3.setOnClickListener(this);
        }
        //  OnClickListener    onClick  
        @Override
        public void onClick(View v) {
            // onClick         
            tv3.setText("                 ");
        }
    }
    

    方法2で使用する外部クラスMyOnClickListenerは以下の通りである:このクラスは簡単で、OnClickListenerを実現し、onClickメソッドを複写すればよい.ここではonClickメソッドでMyOnClickListenerクラス独自の処理ロジックを実現した
    public class MyOnClickListener implements View.OnClickListener {
        @Override
        public void onClick(View v) {
            //              
            //                Button      0.5
            v.setAlpha(0.2f);
        }
    }
    

    デモプログラムのデモを見てみましょう.
    Demo
    demoから,3つのButtonはいずれもリスニングイベントの処理ロジックを完了し,3つの方式が目的を達成していることがわかる.第2の方式では,外部クラスMyOnClickListenerにおける処理ロジックも実現し,第2のbuttonの透明度を0.3に設定した.
    終わります.