【问题标题】:Lifecycle of fragments on a hosting ViewPager activity托管 ViewPager 活动上的片段生命周期
【发布时间】:2015-07-15 15:01:36
【问题描述】:

我在一个由 ViewPager 托管它们的活动上有两个片段。 当我更新 Fragment A 的数据时,它不会出现在显示屏上。 所以我想我应该玩生命周期......我在所有生命周期回调中放置了定位,当我在片段中滑动时没有被调用。 当您在它们之间滑动时,片段不会在生命周期中发生变化吗? 那么如何刷新他们的内容呢?

以我的代码为例:

片段 b : 当一个按钮被点击时,它需要更新片段 A 中的列表并且片段应该显示它。

private RemoveFromHistoryInterface removeFromHistory = new RemoveFromHistoryInterface()
{
    @Override
    public void removeFromHistory( List<Password> passwordsToRemove )
    {
        PagerActivity.removeFromHistory( passwordsToRemove );
    }
};

public interface RemoveFromHistoryInterface
{
    public void removeFromHistory( List<Password> passwordsToRemove  );
}
...
...

removeFromHistory.removeFromHistory( listToRemove );

寻呼机活动(同时托管两个片段)

public static void removeFromHistory( List<Password> passwordsToRemove )
    {
        MainFragment.fromHistoryToMain( passwordsToRemove );
    }

片段A:

@

Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        passwords = PasswordManager.getInstance().getPasswords();
        passwordsList = Password.getPasswordsList();
    }
...
...
    public static void fromHistoryToMain( List<Password> listBackToMain )
        {
            passwordsList.addAll( 0, listBackToMain );
        }

viewpager 适配器:

  public class ViewPagerAdapter extends FragmentPagerAdapter 
    {

    final int PAGE_COUNT = 2;
    private String tabTitles[] = new String[] { "Main", "History" };

    public ViewPagerAdapter( FragmentManager fragmentManager ) 
    {
        super( fragmentManager );
    }

    @Override
    public int getCount() {
        return PAGE_COUNT;
    }

    @Override
    public Fragment getItem( int position ) 
    {
        switch ( position ) 
        {
            case 0:
                return new MainFragment();

            case 1:
                return new HistoryFragment();   
            }
        return null;
    }

    @Override
    public CharSequence getPageTitle( int position ) 
    {
        return tabTitles[position];
    }
}

【问题讨论】:

  • 这取决于您如何填充 ViewPager 片段 - 例如通过光标...
  • 用我的代码摘要编辑了帖子。我没有使用光标。我现在有什么选择?

标签: android android-fragments android-viewpager lifecycle


【解决方案1】:

如果您正在寻找一种方法来了解您的片段何时可​​见/在屏幕上,您可以将其添加到您的片段中:

@Override
  public void setUserVisibleHint(boolean isVisibleToUser) {
    super.setUserVisibleHint(isVisibleToUser);
    if (isVisibleToUser) 
    { do_your_stuff }
    else {  }
  }

【讨论】:

  • nope.. 我只需要刷新我显示的数据。再次调用 onCreateCiew 的方法......有可能吗?该片段中的数据确实得到了更新,但它没有显示在 textview 小部件上..
【解决方案2】:

如果您想在每次滚动 ViewPager 时重新创建 Fragments,您可以在 ViewPager 实例上调用 setOffscreenPageLimit(0)

这将使您的 ViewPager 在每个页面发生变化时完全重新创建您的片段。

这可能会导致一些性能缺陷,因为在滑动期间会重新创建片段。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-21
    • 1970-01-01
    • 1970-01-01
    • 2012-02-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多