2017-02-15 145 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