Androidのリスニングに基づくイベント処理

4435 ワード

デスクトップアプリケーションであろうと、携帯電話アプリケーションであろうと、最も直面しているのはユーザーであり、常に処理しなければならないのはユーザーの動作である--つまりユーザーの動作に応答を提供する必要があり、このようなユーザーの動作に応答を提供するメカニズムはイベント処理である.
Androidのイベントベースのリスニング処理は主に以下の3つの形式を紹介する:1内部クラス形式:イベントリスナークラスを現在のクラスの内部クラスとして定義する.②Activity自体はイベントリスナークラスとして:Activity自体にリスニングインタフェースを実装させ,イベントの処理方法を実装する.③匿名内部クラス形式:匿名内部クラスを使用してイベントリスナーオブジェクトを作成します.
一、内部クラス形式内部クラスを使用して、現在のクラスでこのリスナークラスを復元することができる.Listenerクラスは外部クラスの内部クラスであるため、外部クラスのすべてのインタフェースコンポーネントに自由にアクセスできます.



  

    
public class MainActivity extends Activity {

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

        //      Button  
        Button bt = (Button)findViewById(R.id.mainButton);
        //          
        bt.setOnClickListener(new MyClickListener());
    }

    //            (       )
     class MyClickListener implements View.OnClickListener
     {
        //             ,           
         @Override
         public void onClick(View view)
         {
             EditText txt = (EditText)findViewById(R.id.mainEditText);
             txt.setText("bt      ");
         }
     }

}

以上のプログラムから、リスニングされたイベント処理モデルに基づくプログラミング手順は、以下の1、通常のインタフェースコンポーネント(イベントソース)、すなわちリスニングされたオブジェクトを取得することである.2、リスナークラスを実現する.このリスナークラスは特殊なJAVAクラスであり、XXXXListenerインタフェースを実現しなければならない.3、イベントソースを呼び出すsetXXXXXListenerメソッドイベントリスナーオブジェクトを通常のコンポーネント(イベントソース)に登録する
イベントソース:プログラム内のbtボタンで、アプリケーション内の任意のコンポーネントがイベントソースとして使用できます.イベントリスナー:プログラム中のMyClickListenerクラスであり、リスナークラスはプログラマが実現を担当し、リスナークラスを実現する鍵はプロセッサメソッド登録リスナーを実現することである:serXxxxListener(XxListener)メソッドを呼び出せばよい.上記の3つの事柄について、イベントソースは任意のインタフェースコンポーネントを使用することができ、登録リスナーも1行のコードだけでよいので、イベントプログラミングの鍵はイベントリスナークラスを実現することである.
二、Activity自体はイベントリスナークラスとしてActivity自体をリスナークラスとして使用し、Activityクラスで直接イベント処理方法を定義することができる.この形式は非常に簡潔であるが,この方法には2つの欠点がある:1この形式はプログラム構造の混乱をもたらす可能性があり,Activityの主な職責はインタフェースの初期化作業を完了することであるべきであるが,この場合はイベントを含むプロセッサ法が必要であり,混乱を引き起こす.②Activityインタフェースクラスがリスナーインタフェースを実現する必要がある場合は、変な感じがします.
public class MainActivity extends Activity implements OnClickListener {   //       “”  “”       

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

        //      Button  
        Button bt = (Button)findViewById(R.id.mainButton);
        //    Activity       
        bt.setOnClickListener(this);
    }

     //        
         @Override
         public void onClick(View view)
         {
             EditText txt = (EditText)findViewById(R.id.mainEditText);
             txt.setText("bt      ");
         }
 
}

三、匿名内部クラスはイベントリスナークラスとしてほとんどの場合、イベントプロセッサには多重化価値がない(多重化可能なコードは通常ビジネスロジックメソッドとして抽象化されている)ため、ほとんどのイベントリスナーは一時的に一度しか使用されないため、匿名内部クラス形式のイベントリスナーを使用するのが適切である.実際,この形式は現在最も広く用いられているイベントリスナー形式である.
public class MainActivity extends Activity {

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

        //      Button  
        Button bt = (Button)findViewById(R.id.mainButton);
        //          
        bt.setOnClickListener(new OnClickLstener()
        {
                 @Override
         public void onClick(View view)
         {
             EditText txt = (EditText)findViewById(R.id.mainEditText);
             txt.setText("bt      ");
         }
              });


    }

 }