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 / 輸入事件
- onClick()
- 下列事件,可利用覆寫(Override)觸發:
- onKeyDown(int, KeyEvent)
onKeyUp(int, KeyEvent)
onTrackballEvent(MotionEvent)
onTouchEvent(MotionEvent)
onFocusChanged(boolean, int, Rect)
- onKeyDown(int, KeyEvent)
- onClick的快速加入:
- 在佈局頁面(XML檔案)的Design中,元件的屬性裡,有個onClick屬性,可在裡面填寫onClick的處理函式名稱
- 回到佈局頁面的Text中,找到該元件的 android:onClick="ClickFunction",在上面使用 Alt + Enter ,點選 Create 'ClickFunction(View)' in '...',將會自動在對應的java檔案建立 ClickFunction
- 自訂 Event
- java事件处理机制(自定义事件) - 游鱼 - 博客园
- 狀況說明 : 有一個 ControlSystem Class,裡面有個成員為 TcpClient Class,希望 TcpClient 收到資料時,ControlSystem 能夠知道並且處理。
- 宣告 class TcpClientEvent
- 宣告 interface TcpClientListener
- 在 class TcpClient 中,宣告相關 members
- private Collection listeners;
- public void addEventLister(TcpClientListener listener)
- public void removeEventLister(TcpClientListener listener)
- private void event_ReceiveData(byte[] RcvData)
ps. 在 TcpClient 中,需要事件發生就執行該function,
ps. 在這裡會產生一個 TcpClientEvent,然後執行 event_notifyListeners,讓其幫忙把 TcpClientEvent 送給需要的 TcpClientListener - private void event_notifyListeners(TcpClientEvent event)
- 在 class ControlSystem 中
- 宣告 private class TcpClientListener1 implements TcpClientListener
ps. 這是 ControlSystem 收到事件時,執行動作的地方,也就是 ControlSystem 處理 TcpClient 事件的程式是寫在這裡。
ps. 也可宣告在 class ControlSystem 外面,但我認為,裡面是事件發生時要處理的動作,也不會被其他 class 使用,那就放在使用的 class 中就好了。 - tcpCli.addEventLister(new TcpClientListener1());
- 宣告 private class TcpClientListener1 implements TcpClientListener
- 在 class TcpClient 中,會判斷是否有收到資料,當有收到時則執行 event_ReceiveData(RcvBytes); 然後就會跳到 TcpClientListener1 中去執行。
- 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 { ... }
- 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 ]
文章標籤
全站熱搜