close

依據不同的事件會有不同的使用方法

  • 利用事件監聽器 (Event Listeners),包含下面幾個事件 : 
    • onClick()
      onLongClick()
      onFocusChange()
      onKey()
      onTouch()
      onCreateContextMenu()
    • 可在 Activity 中實做,Ex: button.setOnClickListener(this);
      詳細請參考 [ Reference ] - Android Developers - Input Event / 輸入事件
    • 建立一個匿名的事件監聽器,並裝元件(View)設定至該監聽器,Ex: button.setOnClickListener(mCorkyListener);
      詳細請參考 [ Reference ] - Android Developers - Input Event / 輸入事件
       
  • 下列事件,可利用覆寫(Override)觸發:
    • onKeyDown(int, KeyEvent)
      onKeyUp(int, KeyEvent) 
      onTrackballEvent(MotionEvent)
      onTouchEvent(MotionEvent)
      onFocusChanged(boolean, int, Rect)  
       
  • onClick的快速加入:
    1. 在佈局頁面(XML檔案)的Design中,元件的屬性裡,有個onClick屬性,可在裡面填寫onClick的處理函式名稱
    2. 回到佈局頁面的Text中,找到該元件的 android:onClick="ClickFunction",在上面使用 Alt + Enter ,點選 Create 'ClickFunction(View)' in '...',將會自動在對應的java檔案建立 ClickFunction
       
  • 自訂 Event
    • java事件处理机制(自定义事件) - 游鱼 - 博客园 
    • 狀況說明 : 有一個 ControlSystem Class,裡面有個成員為 TcpClient Class,希望 TcpClient 收到資料時,ControlSystem 能夠知道並且處理。
      1. 宣告 class TcpClientEvent
      2. 宣告 interface TcpClientListener
      3. 在 class TcpClient 中,宣告相關 members
        1. private Collection listeners;
        2. public void addEventLister(TcpClientListener listener)
        3. public void removeEventLister(TcpClientListener listener)
        4. private void event_ReceiveData(byte[] RcvData)
          ps. 在 TcpClient 中,需要事件發生就執行該function,
          ps. 在這裡會產生一個 TcpClientEvent,然後執行 event_notifyListeners,讓其幫忙把 TcpClientEvent 送給需要的 TcpClientListener
        5. private void event_notifyListeners(TcpClientEvent event)
      4. 在 class ControlSystem 中
        1. 宣告 private class TcpClientListener1 implements TcpClientListener
          ps. 這是 ControlSystem 收到事件時,執行動作的地方,也就是 ControlSystem 處理 TcpClient 事件的程式是寫在這裡。
          ps. 也可宣告在 class ControlSystem 外面,但我認為,裡面是事件發生時要處理的動作,也不會被其他 class 使用,那就放在使用的 class 中就好了。
        2. tcpCli.addEventLister(new TcpClientListener1());
      5. 在 class TcpClient 中,會判斷是否有收到資料,當有收到時則執行 event_ReceiveData(RcvBytes); 然後就會跳到 TcpClientListener1 中去執行。
      6. TcpClient.java
        public class TcpClient {
           private Collection listeners;
           ...
           public void addEventLister(TcpClientListener listener) {...}
           public void removeEventLister(TcpClientListener listener) {...}
           private void event_ReceiveData(byte[] RcvData) {...}
           private void event_notifyListeners(TcpClientEvent event) {...}
        
           private void hasReceivedData(byte[] RcvData) {
              event_ReceiveData(RcvData);
           }
           ...
        }
        
        class TcpClientEvent extends EventObject {
           ...
        }
        
        interface TcpClientListener extends EventListener {
           ...
        }
        
         
      7. ControlSystem.java
        public class ControlSystem {
           private TcpClient tclCli = new TcpClient();
        
           public ControlSystem() {
              tcpCli.addEventLister(new TcpClientListener1());
           }
        
           ...
        }
        
        private class TcpClientListener1 implements TcpClientListener {
           @Override
           public void TcpClientEvent(TcpClientEvent event) {
              ...
           }
        }
        
        
         

 


[ Reference ]

arrow
arrow
    文章標籤
    Android studio
    全站熱搜
    創作者介紹
    創作者 jsky 的頭像
    jsky

    jsky手札 ~ 走走停停

    jsky 發表在 痞客邦 留言(0) 人氣()