介面回撥機制詳解
阿新 • • 發佈:2019-01-05
- 在一個類中進行介面定義和呼叫介面中的方法
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(); } }); } }
- 介面回撥機制就是介面定義與實現的分離(或者是定義,實現,呼叫的分離(例如切換攝像頭部落格)),定義的時候更像是一種引用,只是說明有這樣一種方法,但是沒有具體的方法體,只有在需要實際呼叫該方法的時候才對方法進行補全,這樣更利於功能的模組化實現,即在需要修改功能的時候,只需要在呼叫處進行邏輯修改就可以了,而封裝介面的模組不需要改動。