深入理解Android事件處理(二)

                                                      Android事件處理(二)

   2、基於回調事件的處理

           如果說事件監聽是一種委託的事件處理,那麼回調機制恰好相反,對於回調機制事件處理模型來說,事件源和時間監聽器是統一的,或者說事件監聽器完全消失了,當組件激發某個事件時,組件自己特定的方法會負責去處理,
而Java又是一個靜態語言,我們無法爲某個對象動態添加方法,因此只能繼承GUI組件類,並重寫該類的事件處理方法來實現。

          ①自定義UI界面來時現基於回調的時間處理機制。

public class MyButton extends Button
{
public MyButton(Context context, AttribueSet set)
         {
           super(context,set);
          }
        public boolean onKeyDown(int keyCode,KeyEvent event)
         {
           super.onKeyDown(keyCode,event);
           Log.v("sfs","sdf");
           return true; //  返回true表示該事件完全處理,不會傳播出去,如果false,表示爲完全處理,return false
         }
}

在UI 界面添加自定義的Button

<com.sim.demo.MyButton
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="點擊我"
/>

      3、事件傳播

              某組件上發生的事件不僅激發了該組件上的回調方法,也會觸發該組件所在的Activity的回調方法----只要事件能傳播到該Activity


public class Propagation extends Activity
{
   puglic void onCreate(Bundle savedInstanceState){
        super.onCreate(saveInstanceState);
        bt = findViewById(R.id.bn);
        bt.setOnKeyListener(new OnKeyListener()
       {
          public boolean onKey(View source,int keyCode,KeyEvent event)
           {
                   if(event.getAction()==KeyEvent.ACTION_DOWN){
                         Toast.makeText(getApplicationContext(), "觸發了點擊效果",
     Toast.LENGTH_SHORT).show();


                   }
                   return false; //會向外擴散
            }
         });
        public boolean onKeyDown(int keyCode,KeyEvent event)
        {

              Toast.makeText(getApplicationContext(), "觸發了點擊效果",
     Toast.LENGTH_SHORT).show();

            return true;

        }
     
  }

           上面就會觸發兩次效果

          ④對比Android兩種事件處理方式?

               不難發現基於監聽事件處理模型具有更大的優勢,
  基於監聽的事件模型分工更明確,事件源,事件監聽由兩個類分工實現,因此具有更好的課維護性。所以通常優先考慮基於監聽的事件處理


發佈了34 篇原創文章 · 獲贊 6 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章