簡體   English   中英

如何在回壓時刷新以前的片段而又不打亂后疊

[英]How to refresh a previous fragment on back press without disturbing the back stack

我正在使用viewpager和附加的fragmentA進行制表活動,當我想移動fragmentB時,用當前fragmentA替換fragmentB。我需要在FragmentB中為onbackpress找到解決方案以刷新fragmentA,而無需更改Backstack,因為我在一個選項卡中使用了將近十個片段。

片段生命周期中是否有任何方法

當片段B超過片段A時,片段A為onPause()。 反壓后,片段A為onResume()。 因此,您可以創建一個布爾值來觀察此更改。

在片段A中

private boolean isBackFromB;

@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    isBackFromB=false;
}

@Override
public void onPause() {
    super.onPause();
    isBackFromB = true;
}

@Override
public void onResume() {
    super.onResume();
    updateUI();
    if (isBackFromB) //Do something
}

View pager並不總是將其碎片保存在內存中,因此您必須處理以下兩種情況:1-重新創建碎片-只需從保存它們的位置讀取數據並以普通方式顯示即可。 2-片段是從外部修改的,而ViewPager仍保留着它,據我所知,這就是您所關心的。 您可以做的是創建此偵聽器 ,然后通知片段再次顯示該片段,並可能應重新加載其數據。

在不同應用程序組件之間進行通信的更復雜答案是使用諸如Otto之類的事件總線。

重寫onBackPressed()方法在Activity ,加入所有fragment在堆棧中。

@Override
public void onBackPressed() {

FragmentManager manager =getFragmentManager();
int count = manager.getBackStackEntryCount();

if (count == 0) {
    super.onBackPressed();
  } else {
    manager.popBackStack();
  }

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM