2017-02-15 183 views
0

我有3個片段。Android片段backstack(更改最新更改相同片段的UI)

  • HomeFragment
  • UserFragment
  • ImagesFragment

我用這個方法用於添加片段:

  • add(R.id.frameLayout, HomeFragment, "HomeFragment");
  • add(R.id.frameLayout, UserFragment, "UserFragment");
  • add(R.id.frameLayout, ImagesFragment, "ImagesFragment");

我的問題:

我點擊並開始這條道路:

  1. 添加HomeFragment
  2. 添加UserFragment < - 點擊後續按鈕(BTN跟着改變UI按照
  3. add ImagesFragment
  4. 添加UserFragment < - 點擊後續按鈕(BTN跟着改變UI 取消關注完成
  5. 按後退按鈕back to step 3 -- show ImagesFragment`
  6. 按後退按鈕back to step 2 -- show UserFragment` < - 哎呀!這是我的問題。在第4步,我點擊關注按鈕和取消關注完成。但不改變步驟2中的用戶界面? :(

如何對同一片段最新變化更新UI?

你的Instagram?請檢查一下。開放XYZ頁面,並開始下。之後單擊主頁BTN(不按背部)的下一個XYZ再次頁面並取消關注設置。現在按後退按鈕返回到某某頁面。你展現變化遵循BTN UI

+0

plz在'show fragment'和'add fragment'和'update ui'中顯示你的代碼# – Yat3s

+0

@Yat3s代碼沒必要。請再次閱讀我的問題 – grizzly

+0

問題是'UserFragment'是單個實例還是兩個實例? – Yat3s

回答

1

在你UserFragment,添加onHiddenChanged回調刷新UI。 如果不總是需要刷新在簡歷背面的UserFra gment,使用shouldReloadScreen(它加入你的活動)標誌象下面這樣:

@Override 
    public void onHiddenChanged(boolean hidden) { 
     super.onHiddenChanged(hidden); 
     if (hidden) { 
      unregisterEventBus(); 
     } else { 
      registerEventBus(); 
      if (((YourActivity) context).shouldReloadScreen()) { 
       loadData(); 
       ((RevolveActivity) context).setshouldReloadScreen(false); 
      } 
     } 
    } 

如果沒有必要爲您展現ImageFragment而從第4步移回,請使用以下方法:

雖然從步驟移動3到第4步,而不是添加UserFragment刪除ImageFragment。這將只保留stackTrace中的一個UserFragment實例。

+0

我的6個步驟就是例子。在instagram或spotify此更新ui工作良好。 instagram允許用戶打開無限制的頁面和帖子。並按回按鈕導航是不錯的工作。在instagram中,如果您打開10次相同頁面,舊頁面會更新新頁面上的更改 – grizzly