在android中有許多控件,如TextView、Button等。他們大多都有監聽器,如View類下的單擊監聽,按鍵監聽等等
有沒有想過自己定義一個監聽呢?
1.用關鍵字interface定義接口OnTestListening,通過關鍵字implements來聲明接口;
在接口中我們可以定義接口函數,用來以后監聽時重寫,可以定義好多,這里我只定義一個;
在類中定義一個公共函數用於設置監聽;
具體看以下代碼:
1 public interface OnTestListening{ 2 void TestListening(int i); 3 } 4 5 OnTestListening mOnTestListening=null; 6 public void setOnTestListening(OnTestListening e){ 7 mOnTestListening=e; 8 }
2.為了監聽的實現,我們需要監聽到的信息進行掃描,這時我們就用到了定時器,它能夠按一定時間執行一次Handler;
1 Timer mTimer=new Timer(); 2 TimerTask task=new TimerTask(){ 3 4 @Override 5 public void run() { 6 // TODO Auto-generated method stub 7 Message message = new Message(); 8 9 handler.sendMessage(message); 10 11 } 12 13 }; 14 Handler handler=new Handler(){ 15 16 @Override 17 public void handleMessage(Message msg) { 18 // TODO Auto-generated method stub 19 if(mOnTestListening!=null){ 20 mOnTestListening.TestListening(0); 21 } 22 23 super.handleMessage(msg); 24 } 25 26 };
3.在類中定義一個共有函數run(),用於啟動類中的定時器;
1 public void run(){ 2 mTimer.schedule(task, 5000,5000);//每五秒執行一次handler 3 }
全部源代碼:
監聽類TestA:
package ccit.qrs101; import java.util.Timer; import java.util.TimerTask; import android.os.Handler; import android.os.Message; public class testA { Timer mTimer=new Timer(); TimerTask task=new TimerTask(){ @Override public void run() { // TODO Auto-generated method stub Message message = new Message(); handler.sendMessage(message); } }; Handler handler=new Handler(){ @Override public void handleMessage(Message msg) { // TODO Auto-generated method stub if(mOnTestListening!=null){ mOnTestListening.TestListening(0); } super.handleMessage(msg); } }; public void run(){ mTimer.schedule(task, 5000,5000);//每五秒執行一次handler } public interface OnTestListening{ void TestListening(int i); } OnTestListening mOnTestListening=null; public void setOnTestListening(OnTestListening e){ mOnTestListening=e; } }
Activity:
package ccit.qrs101; import android.app.Activity; import android.app.AlertDialog; import android.content.DialogInterface; import android.os.Bundle; import android.view.View; import android.widget.Toast; public class TestActivity extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); testA mtestA=new testA(); mtestA.run(); mtestA.setOnTestListening(new testA.OnTestListening() { @Override public void TestListening(int i) { // TODO Auto-generated method stub //Toast.makeText(TestActivity.this, "監聽成功!!!", 1000).show(); new AlertDialog.Builder(TestActivity.this) .setTitle("信息提示") .setMessage("監聽成功!!!") .setPositiveButton("OK", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { // TODO Auto-generated method stub } }) .create() .show(); } }); } }