在 Activity A 持有 Activity B 的引用,或通過廣播直接操作 B 的 View:
public class UiStateManager {
private static UiStateManager instance = new UiStateManager();
public static UiStateManager get() { return instance; }
private boolean hideButtons = false;
private long hideUntilTimestamp = 0;
public synchronized void requestHideButtons(long durationMs) {
hideButtons = true;
hideUntilTimestamp = System.currentTimeMillis() + durationMs;
}
public synchronized boolean shouldHideButtons() {
if (hideButtons && System.currentTimeMillis() < hideUntilTimestamp) return true;
hideButtons = false; // 過期自動重置
return false;
}
}
@Override
protected void onResume() {
super.onResume();
updateButtonVisibility();
}
private void updateButtonVisibility() {
boolean hide = UiStateManager.get().shouldHideButtons();
btnAction.setVisibility(hide ? View.GONE : View.VISIBLE);
}
UiStateManager.get().requestHideButtons(10_000); // 10 秒後自動恢復
// SharedViewModel (Scoped to Activity 或 Application)
public class SharedViewModel extends ViewModel {
private MutableLiveData hideButtons = new MutableLiveData<>(false);
public LiveData getHideButtons() { return hideButtons; }
public void setHideButtons(boolean hide) { hideButtons.postValue(hide); }
}
// Activity A
viewModel.setHideButtons(true);
// Activity B
viewModel.getHideButtons().observe(this, hide -> btn.setVisibility(hide ? GONE : VISIBLE));
跨 Activity 傳遞「不變數據/狀態」,而非「可變 View 引用」。 用單例狀態管理器或 SharedViewModel,生命周期安全、代碼解耦、易測試。