讓我們放置 3 個可能遵循堆疊A->B->C的激活
如何關閉A并保留B->C,但前提是B打開C?
C并不總是打開,但如果它只打開,則應該洗掉A ,將堆疊保留為B->C。否則將保持為A->B。
我看不到在A中使用finish()的可能性,因為在打開C時它應該從B關閉。
順便說一句,A是具有自己親和力的單個實體。
uj5u.com熱心網友回復:
撰寫一個abstract BaseActivity類并LocalBroadcastManager在其中實作 a 并注冊 a BroadcastReceiver。請注意,我們還引入了一個抽象onFinishReceived方法。
public abstract class BaseActivity extends AppCompatActivity {
private LocalBroadcastManager mLBM;
private final BroadcastReceiver receiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
onFinishReceived(intent.getStringExtra("activity"));
}
}
protected void onCreate(@Nullable Bundle savedInstanceState) {
...
mLBM = LocalBroadcastManager.getInstance(this);
IntentFilter filter = new IntentFilter();
filter.addAction(...);
mLBM.registerReceiver(receiver, filter);
}
protected void onDestroy() {
mLBM.unregisterReceiver(receiver);
mLBM = null;
}
abstract void onFinishReceived(String activity);
}
A然后,從 and擴展 allB和CActivitiesBaseActivity并覆寫該onFinishReceived()方法。
public class A extends BaseActivity {
void onFinishReceived(String activity) {
if (activity.equals("A") { // or "B" or "C"
finish();
}
}
}
}
現在,每當你想完成一項特定的活動時,
LocalBroadcastManager.getInstance(context)
.sendBroadcast(new Intent()
.setAction(...)
.putExtra("activity", "A") // or "B" or "C"
);
LocalBroadcastManager現在已棄用。如果你可以使用類似的東西會更好RxJava。這個想法是使用異步和基于事件的機制,而不是使用簡單丑陋的解決方案,例如將 Activity 存盤在靜態變數中。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/416054.html
標籤:
下一篇:PublicKeyCredentialsWebauthn“內部”??身份驗證缺少Android上的userHandle(AndroidSaftynet)
