1. 程式人生 > >介面回撥機制詳解

介面回撥機制詳解

  • 在一個類中進行介面定義和呼叫介面中的方法
    public class Topbar {
    	
    	//需要一個變數來對映呼叫者傳進來的一個介面
    	private topbarClickListner listener;
    	
    	//定義一個介面
    	public interface topbarClickListner{
    		//定義leftButton的點選事件
    		public void leftButtonClick();
    		//定義rightButton的點選事件
    		public void rightButtonClick();
    	}
    	
    	//暴露一個方法給呼叫者。呼叫者可以把介面的實現以匿名內部類的方式(或者實現介面的類的物件)傳遞進來
    	public void setOnTopbarClickListener(topbarClickListner listener){
    		this.listener=listener;//這樣呼叫者就和模板聯絡在一起
    	}
    	
    	Button leftButton=(Button)findViewById(R.id.left_button);
    	Button rightButton=(Button)findViewById(R.id.right_button);
    	//修改點選事件,不在點選事件中進行具體的邏輯實現,而是呼叫介面引用的方法
    	leftButton.setOnClickListener(new OnClickListener(){
    		@Override
    		public void onClick(View v){
    			listener.leftButtonClick();		}
    	});
    	rightButton.setOnClickListener(new OnClickListener(){
    		@Override
    		public void onClick(View v){
    			listener.rightButtonClick();
    		}
    	});
    	//該類不關心具體的點選事件的實現,具體的實現而是交給呼叫者來決定,這裡介面更像是一種引用
    }

  • 在另一個類中進行點選事件的具體實現
    public class MainActivity extends Activity{
    	protected void onCreate(Bundle savedInstanceState){
    		super.onCreate(savedInstanceState);
    		setContentView(R.layout.activity_main);
    		Topbar topbar=(Topbar)findViewById(R.id.topbar);
    		
    		//把一個介面的實現以匿名內部類的方式傳遞進來		
    		topbar.setOnTopbarClickListener(new topbarClickListner(){
    			@Override
    			public void leftButtonClick() {
    				//新增點選事件的具體實現
    				Toast.makeText(MainActivity.this, "left", Toast.LENGTH_SHORT).show();				
    			}
    
    			@Override
    			public void rightButtonClick() {
    				Toast.makeText(MainActivity.this, "left", Toast.LENGTH_SHORT).show(); 					
    			}
    			
    		});
    		
    	}
    }

  • 介面回撥機制就是介面定義與實現的分離(或者是定義,實現,呼叫的分離(例如切換攝像頭部落格)),定義的時候更像是一種引用,只是說明有這樣一種方法,但是沒有具體的方法體,只有在需要實際呼叫該方法的時候才對方法進行補全,這樣更利於功能的模組化實現,即在需要修改功能的時候,只需要在呼叫處進行邏輯修改就可以了,而封裝介面的模組不需要改動。