自定義 View 內部發生事件(點擊、滑動、數據變化),需實時通知 Activity 更新業務邏輯或 UI;Activity 也需主動控制 View 行為。
public class CustomView extends View {
// 定義回調接口
public interface OnDataChangeListener {
void onDataChanged(String data, int type);
void onActionTriggered(String action);
}
private OnDataChangeListener listener;
// 供 Activity 設置監聽器
public void setOnDataChangeListener(OnDataChangeListener listener) {
this.listener = listener;
}
// 內部事件觸發時調用
private void notifyDataChanged(String data) {
if (listener != null) {
listener.onDataChanged(data, currentType);
}
}
}
public class MainActivity extends AppCompatActivity implements CustomView.OnDataChangeListener {
private CustomView customView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
customView = findViewById(R.id.custom_view);
customView.setOnDataChangeListener(this); // 綁定
}
@Override
public void onDataChanged(String data, int type) {
// 處理業務邏輯,更新其他 UI
textView.setText("收到: " + data);
}
@Override
public void onActionTriggered(String action) {
if ("refresh".equals(action)) {
loadDataFromServer();
}
}
}
customView.refreshData())。
// View 中使用弱引用持有監聽器
private WeakReference<OnDataChangeListener> listenerRef;
public void setOnDataChangeListener(OnDataChangeListener listener) {
this.listenerRef = new WeakReference<>(listener);
}
private void notifyDataChanged(String data) {
OnDataChangeListener listener = listenerRef.get();
if (listener != null) listener.onDataChanged(data, type);
}
或在 Activity onDestroy 中置空:customView.setOnDataChangeListener(null)。
接口回調 是 Android 組件通信的基石,清晰定義契約、職責單一、易測試。配合弱引用或生命周期解綁,構建穩健的自定義 View 生態。